/
PGStudio
/
DiplomaProject
Обзор
Документация
Войти
/
PGStudio
/
DiplomaProject
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/SpriteForVisualNovel.gd
115 строк
4 KB
PGStudio
first_commit
21 июн 2026, 21:56
21 июн 2026, 21:56
69ac2dc
Код
Авторство
О чём код?
extends Node const AnimationFunctions = preload("res://scripts/AnimationFunctions.gd") class SpriteVN: enum __MODE_NODE { NODE_2D, NODE_3D } var node: Node var root: Node var surface: SubViewport var mode: __MODE_NODE var old_position: Vector2 var current_position: Vector2 var target_position: Vector2 var old_scale: Vector2 var current_scale: Vector2 var target_scale: Vector2 var old_alpha: float var current_alpha: float var target_alpha: float var old_darkened: float var current_darkened: float var target_darkened: float var time_animation: Timer var original_color: Color func update() -> void: if time_animation.is_stopped() == false: current_position = AnimationFunctions.ease_out_animation(old_position, target_position, time_animation) current_scale = AnimationFunctions.ease_out_animation(old_scale, target_scale, time_animation) current_alpha = AnimationFunctions.ease_in_animation(old_alpha, target_alpha, time_animation) current_darkened = AnimationFunctions.ease_in_animation(old_darkened, target_darkened, time_animation) root.position = current_position root.scale = current_scale root.modulate = original_color.darkened(current_darkened) root.modulate.a = current_alpha func skip_animation() -> void: time_animation.stop() current_position = target_position current_scale = target_scale current_alpha = target_alpha current_darkened = target_darkened root.position = current_position root.scale = current_scale root.modulate = original_color.darkened(current_darkened) root.modulate.a = current_alpha func set_sprite(data: Variant, parent: Variant) -> void: var new_node: Node2D = Node2D.new() var new_subviewport: SubViewport = SubViewport.new() var new_texture_rect: TextureRect = TextureRect.new() new_node.add_child(new_texture_rect) new_node.add_child(new_subviewport) new_subviewport.transparent_bg = true new_texture_rect.texture = new_subviewport.get_texture() parent.add_child(new_node) var current_sprite2d = data.find_child("Sprite2D") current_sprite2d.position = current_sprite2d.get_rect().size / 2.0 node = data root = new_node root.hide() surface = new_subviewport surface.add_child(node) surface.size = current_sprite2d.get_rect().size current_position = Vector2.ONE current_scale = Vector2.ONE current_alpha = 0.0 current_darkened = 0.0 target_position = Vector2.ONE target_scale = Vector2.ONE target_alpha = 0.0 target_darkened = 0.0 time_animation = Timer.new() time_animation.one_shot = true time_animation.timeout.connect(func(): current_position = target_position current_scale = target_scale current_alpha = target_alpha root.position = current_position root.scale = current_scale root.modulate.a = current_alpha if target_alpha == 0.0: root.hide() ) original_color = root.modulate node.add_child(time_animation) func set_target(position: Vector2, scale: Vector2, alpha: float, darkened: float, time: float) -> void: if target_alpha == 0.0: old_position = position + surface.size * (1.0 - target_scale.x) / 2.0 else: old_position = current_position old_scale = current_scale old_alpha = current_alpha old_darkened = current_darkened if alpha == 0.0: target_position = target_position + surface.size * (current_scale.x - scale.x) / 2.0 else: target_position = position + surface.size * (1.0 - scale.x) / 2.0 target_scale = scale target_alpha = alpha target_darkened = darkened if time <= 0.0: time = 1.175494E-38 time_animation.wait_time = time time_animation.start() if alpha > 0.0: root.show() func set_scale(value: Vector2) -> void: root.scale = value old_scale = value current_scale = value target_scale = value func get_size() -> Vector2: return surface.size