HighNoonRoulette/addons/localization_editor/scenes/remaps/LocalizationRemap.gd
2025-08-28 01:55:38 +02:00

95 lines
3.1 KiB
GDScript

# Remap UI for LocalizationEditor : MIT License
# @author Vladimir Petrenko
@tool
extends MarginContainer
var _key
var _remap
var _data: LocalizationData
@onready var _remap_ui = $HBox/Remap
@onready var _audio_ui = $HBox/Audio
@onready var _video_ui = $HBox/Video
@onready var _image_ui = $HBox/Image
const LocalizationRemapDialogVideo = preload("res://addons/localization_editor/scenes/remaps/LocalizationRemapDialogVideo.tscn")
const LocalizationRemapDialogImage = preload("res://addons/localization_editor/scenes/remaps/LocalizationRemapDialogImage.tscn")
func set_data(key, remap, data: LocalizationData) -> void:
_key = key
_remap = remap
_data = data
_remap_ui.set_data(key, remap, data)
_init_connections()
_draw_view()
func _init_connections() -> void:
if not _data.is_connected("data_remapkey_value_changed", _draw_view):
assert(_data.data_remapkey_value_changed.connect(_draw_view) == OK)
if not _audio_ui.is_connected("pressed", _on_audio_pressed):
assert(_audio_ui.connect("pressed", _on_audio_pressed) == OK)
if not _video_ui.is_connected("pressed", _on_video_pressed):
assert(_video_ui.connect("pressed", _on_video_pressed) == OK)
if not _image_ui.is_connected("pressed", _on_image_pressed):
assert(_image_ui.connect("pressed", _on_image_pressed) == OK)
func _draw_view() -> void:
_check_buttons()
func _check_buttons() -> void:
_hide_buttons()
var type = _data.remap_type(_remap)
match type:
"audio":
_audio_ui.show()
"image":
_image_ui.show()
"video":
_video_ui.show()
func _hide_buttons() -> void:
_audio_ui.hide()
_video_ui.hide()
_image_ui.hide()
func _on_audio_pressed() -> void:
var audio_player
if get_tree().get_root().has_node("AudioPlayer"):
audio_player = get_tree().get_root().get_node("AudioPlayer") as AudioStreamPlayer
else:
audio_player = AudioStreamPlayer.new()
get_tree().get_root().add_child(audio_player)
var audio = load(_remap.value)
audio.set_loop(false)
audio_player.stream = audio
audio_player.play()
func _on_video_pressed() -> void:
var video_dialog: Window = LocalizationRemapDialogVideo.instantiate()
var root = get_tree().get_root()
root.add_child(video_dialog)
video_dialog.title = _data.filename(_remap.value)
var video_player = video_dialog.get_node("VideoPlayer") as VideoStreamPlayer
video_player.expand = true
var video: VideoStream = load(_remap.value)
video_player.stream = video
video_dialog.close_requested.connect(_video_dialog_close.bind(video_dialog))
video_dialog.popup_centered(Vector2i(500, 300))
video_player.play()
func _video_dialog_close(video_dialog: Window) -> void:
video_dialog.hide()
func _on_image_pressed() -> void:
var image_dialog: Window = LocalizationRemapDialogImage.instantiate()
var root = get_tree().get_root()
root.add_child(image_dialog)
image_dialog.title = _data.filename(_remap.value)
var texture = image_dialog.get_node("Texture") as TextureRect
var image = load(_remap.value)
texture.texture = image
image_dialog.close_requested.connect(_image_dialog_close.bind(image_dialog))
image_dialog.popup_centered(Vector2i(500, 300))
func _image_dialog_close(image_dialog: Window) -> void:
image_dialog.hide()