mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-02-25 06:53:14 +00:00
Initial work on audio layers
This commit is contained in:
parent
11e05ac471
commit
cc0ab5949f
11 changed files with 79 additions and 12 deletions
|
@ -27,10 +27,6 @@ config/windows_native_icon="res://assets/graphics/icons/icon.ico"
|
|||
config/ExtensionsAPI_Version=5
|
||||
config/Pxo_Version=4
|
||||
|
||||
[audio]
|
||||
|
||||
driver/driver="Dummy"
|
||||
|
||||
[autoload]
|
||||
|
||||
Global="*res://src/Autoload/Global.gd"
|
||||
|
|
|
@ -631,7 +631,7 @@ class ProjectAPI:
|
|||
|
||||
## Returns the current cel.
|
||||
## Cel type can be checked using function [method get_class_name] inside the cel
|
||||
## type can be GroupCel, PixelCel, Cel3D, or BaseCel.
|
||||
## type can be GroupCel, PixelCel, Cel3D, CelTileMap, AudioCel or BaseCel.
|
||||
func get_current_cel() -> BaseCel:
|
||||
return current_project.get_current_cel()
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ signal cel_switched ## Emitted whenever you select a different cel.
|
|||
signal project_data_changed(project: Project) ## Emitted when project data is modified.
|
||||
signal font_loaded ## Emitted when a new font has been loaded, or an old one gets unloaded.
|
||||
|
||||
enum LayerTypes { PIXEL, GROUP, THREE_D, TILEMAP }
|
||||
enum LayerTypes { PIXEL, GROUP, THREE_D, TILEMAP, AUDIO }
|
||||
enum GridTypes { CARTESIAN, ISOMETRIC, ALL }
|
||||
## ## Used to tell whether a color is being taken from the current theme,
|
||||
## or if it is a custom color.
|
||||
|
|
|
@ -800,7 +800,10 @@ func _cel_switched() -> void:
|
|||
var layer: BaseLayer = Global.current_project.layers[Global.current_project.current_layer]
|
||||
var layer_type := layer.get_layer_type()
|
||||
# Do not make any changes when its the same type of layer, or a group layer
|
||||
if layer_type == _curr_layer_type or layer_type == Global.LayerTypes.GROUP:
|
||||
if (
|
||||
layer_type == _curr_layer_type
|
||||
or layer_type in [Global.LayerTypes.GROUP, Global.LayerTypes.AUDIO]
|
||||
):
|
||||
return
|
||||
_show_relevant_tools(layer_type)
|
||||
|
||||
|
|
18
src/Classes/Cels/AudioCel.gd
Normal file
18
src/Classes/Cels/AudioCel.gd
Normal file
|
@ -0,0 +1,18 @@
|
|||
class_name AudioCel
|
||||
extends BaseCel
|
||||
## A class for the properties of cels in AudioLayers.
|
||||
## The term "cel" comes from "celluloid" (https://en.wikipedia.org/wiki/Cel).
|
||||
|
||||
|
||||
func _init(_opacity := 1.0) -> void:
|
||||
opacity = _opacity
|
||||
image_texture = ImageTexture.new()
|
||||
|
||||
|
||||
func get_image() -> Image:
|
||||
var image := Global.current_project.new_empty_image()
|
||||
return image
|
||||
|
||||
|
||||
func get_class_name() -> String:
|
||||
return "AudioCel"
|
36
src/Classes/Layers/AudioLayer.gd
Normal file
36
src/Classes/Layers/AudioLayer.gd
Normal file
|
@ -0,0 +1,36 @@
|
|||
class_name AudioLayer
|
||||
extends BaseLayer
|
||||
|
||||
signal audio_changed
|
||||
|
||||
var audio: AudioStream:
|
||||
set(value):
|
||||
audio = value
|
||||
audio_changed.emit()
|
||||
|
||||
|
||||
func _init(_project: Project, _name := "") -> void:
|
||||
project = _project
|
||||
name = _name
|
||||
|
||||
|
||||
# Overridden Methods:
|
||||
func serialize() -> Dictionary:
|
||||
var data := {"name": name, "type": get_layer_type()}
|
||||
return data
|
||||
|
||||
|
||||
func deserialize(dict: Dictionary) -> void:
|
||||
super.deserialize(dict)
|
||||
|
||||
|
||||
func get_layer_type() -> int:
|
||||
return Global.LayerTypes.AUDIO
|
||||
|
||||
|
||||
func new_empty_cel() -> AudioCel:
|
||||
return AudioCel.new()
|
||||
|
||||
|
||||
func set_name_to_default(number: int) -> void:
|
||||
name = tr("Audio track") + " %s" % number
|
|
@ -640,10 +640,10 @@ func find_first_drawable_cel(frame := frames[current_frame]) -> BaseCel:
|
|||
var result: BaseCel
|
||||
var cel := frame.cels[0]
|
||||
var i := 0
|
||||
while cel is GroupCel and i < layers.size():
|
||||
while (cel is GroupCel or cel is AudioCel) and i < layers.size():
|
||||
cel = frame.cels[i]
|
||||
i += 1
|
||||
if not cel is GroupCel:
|
||||
if cel is not GroupCel and cel is not AudioCel:
|
||||
result = cel
|
||||
return result
|
||||
|
||||
|
|
|
@ -855,6 +855,8 @@ func _on_add_layer_list_id_pressed(id: int) -> void:
|
|||
Global.LayerTypes.THREE_D:
|
||||
layer = Layer3D.new(project)
|
||||
SteamManager.set_achievement("ACH_3D_LAYER")
|
||||
Global.LayerTypes.AUDIO:
|
||||
layer = AudioLayer.new(project)
|
||||
add_layer(layer, project)
|
||||
|
||||
|
||||
|
|
|
@ -240,7 +240,7 @@ offset_left = -22.0
|
|||
offset_top = -10.0
|
||||
offset_bottom = 10.0
|
||||
mouse_default_cursor_shape = 2
|
||||
item_count = 4
|
||||
item_count = 5
|
||||
popup/item_0/text = "Add Pixel Layer"
|
||||
popup/item_1/text = "Add Group Layer"
|
||||
popup/item_1/id = 1
|
||||
|
@ -248,6 +248,8 @@ popup/item_2/text = "Add 3D Layer"
|
|||
popup/item_2/id = 2
|
||||
popup/item_3/text = "Add Tilemap Layer"
|
||||
popup/item_3/id = 3
|
||||
popup/item_4/text = "Add Audio Layer"
|
||||
popup/item_4/id = 4
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/TimelineButtons/LayerTools/MarginContainer/LayerSettingsContainer/LayerButtons/AddLayer/AddLayerList"]
|
||||
layout_mode = 0
|
||||
|
|
|
@ -15,6 +15,7 @@ var button_pressed := false:
|
|||
get:
|
||||
return main_button.button_pressed
|
||||
|
||||
var audio_player: AudioStreamPlayer
|
||||
@onready var properties: AcceptDialog = Global.control.find_child("LayerProperties")
|
||||
@onready var main_button := %LayerMainButton as Button
|
||||
@onready var expand_button := %ExpandButton as BaseButton
|
||||
|
@ -31,7 +32,7 @@ var button_pressed := false:
|
|||
func _ready() -> void:
|
||||
main_button.layer_index = layer_index
|
||||
main_button.hierarchy_depth_pixel_shift = HIERARCHY_DEPTH_PIXEL_SHIFT
|
||||
Global.cel_switched.connect(func(): z_index = 1 if button_pressed else 0)
|
||||
Global.cel_switched.connect(_on_cel_switched)
|
||||
var layer := Global.current_project.layers[layer_index]
|
||||
layer.name_changed.connect(func(): label.text = layer.name)
|
||||
layer.visibility_changed.connect(update_buttons)
|
||||
|
@ -39,6 +40,10 @@ func _ready() -> void:
|
|||
linked_button.visible = true
|
||||
elif layer is GroupLayer:
|
||||
expand_button.visible = true
|
||||
elif layer is AudioLayer:
|
||||
audio_player = AudioStreamPlayer.new()
|
||||
audio_player.stream = layer.audio
|
||||
add_child(audio_player)
|
||||
custom_minimum_size.y = Global.animation_timeline.cel_size
|
||||
label.text = layer.name
|
||||
line_edit.text = layer.name
|
||||
|
@ -56,6 +61,12 @@ func _ready() -> void:
|
|||
update_buttons()
|
||||
|
||||
|
||||
func _on_cel_switched() -> void:
|
||||
z_index = 1 if button_pressed else 0
|
||||
if is_instance_valid(audio_player):
|
||||
audio_player.play(Global.current_project.current_frame / Global.current_project.fps)
|
||||
|
||||
|
||||
func update_buttons() -> void:
|
||||
var layer := Global.current_project.layers[layer_index]
|
||||
if layer is GroupLayer:
|
||||
|
|
|
@ -169,7 +169,6 @@ caret_blink_interval = 0.5
|
|||
disable_3d = true
|
||||
item_count = 2
|
||||
item_0/text = "Properties"
|
||||
item_0/id = 0
|
||||
item_1/text = "Clipping mask"
|
||||
item_1/checkable = 1
|
||||
item_1/id = 1
|
||||
|
|
Loading…
Add table
Reference in a new issue