/
PGStudio
/
DiplomaProject
Обзор
Документация
Войти
/
PGStudio
/
DiplomaProject
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/DisplayCharacters.gd
183 строки
7 KB
PGStudio
first_commit
21 июн 2026, 21:56
21 июн 2026, 21:56
69ac2dc
Код
Авторство
О чём код?
extends Node2D # INITIALIZATION @onready var CurrentSubViewport: SubViewport = $SubViewport const SpriteForVisualNovel = preload("res://scripts/SpriteForVisualNovel.gd") var aspect: float = 16.0 / 9.0 var time_animation: float = 0.5 var focus_mode: bool = false var focus_scale: Vector2 = Vector2(0.1, 0.1) var focus_darkened: float = 0.5 class Character: enum WHERE_CHARACTERS { LEFT, RIGHT, CENTER, FREE, HIDE } var real_position: Vector2 var real_scale: Vector2 var real_alpha: float var real_darkened: float var is_focus: bool var sprite: SpriteForVisualNovel.SpriteVN var status: WHERE_CHARACTERS var characters: Dictionary[String, Character] # BASE FUNCTIONS func _ready() -> void: CurrentSubViewport.transparent_bg = true func _process(_delta: float) -> void: for name_character in characters: var character: Character = characters[name_character] character.sprite.update() # PUBLIC FUNCTIONS func add_character(character: PackedScene, character_name: String) -> void: var new_character: Character = Character.new() new_character.sprite = SpriteForVisualNovel.SpriteVN.new() new_character.sprite.set_sprite(character.instantiate(), CurrentSubViewport) new_character.real_position = Vector2(0.0, 0.0) new_character.real_scale = Vector2(0.8, 0.8) new_character.real_alpha = 0.0 new_character.real_darkened = 0.0 new_character.is_focus = false new_character.sprite.set_scale(new_character.real_scale) CurrentSubViewport.size.y = max(CurrentSubViewport.size.y, new_character.sprite.get_size().y) CurrentSubViewport.size.x = int(float(CurrentSubViewport.size.y) * 16.0 / 9.0) if characters.get(character_name) != null: print("Character \"%s\" is already exists! This character will be replaced!" % character_name) characters.erase(character_name) characters[character_name] = new_character func show_character(character_name: String, where: String, character_position: Vector2 = Vector2.ZERO, character_scale: Vector2 = Vector2.ONE) -> void: var current_character: Character = characters[character_name] if current_character != null: var target_position: Vector2 var target_scale: Vector2 var target_alpha: float var target_time: float var target_darkened: float match where: "left": target_position = Vector2(0.0, 0.0) target_scale = Vector2.ONE target_alpha = 1.0 target_darkened = 0.0 target_time = time_animation current_character.real_position = Vector2(0.0, 0.0) current_character.real_scale = Vector2.ONE current_character.real_alpha = 1.0 current_character.real_darkened = 0.0 current_character.status = Character.WHERE_CHARACTERS.LEFT "right": target_position = Vector2(CurrentSubViewport.size.x - current_character.sprite.get_size().x, 0.0) target_scale = Vector2.ONE target_alpha = 1.0 target_darkened = 0.0 target_time = time_animation current_character.real_position = Vector2(CurrentSubViewport.size.x - current_character.sprite.get_size().x, 0.0) current_character.real_scale = Vector2.ONE current_character.real_alpha = 1.0 current_character.real_darkened = 0.0 current_character.status = Character.WHERE_CHARACTERS.RIGHT "center": target_position = Vector2((CurrentSubViewport.size.x - current_character.sprite.get_size().x) / 2.0, 0.0) target_scale = Vector2.ONE target_alpha = 1.0 target_darkened = 0.0 target_time = time_animation current_character.real_position = Vector2((CurrentSubViewport.size.x - current_character.sprite.get_size().x) / 2.0, 0.0) current_character.real_scale = Vector2.ONE current_character.real_alpha = 1.0 current_character.real_darkened = 0.0 current_character.status = Character.WHERE_CHARACTERS.CENTER "free": target_position = character_position target_scale = character_scale target_alpha = 1.0 target_darkened = 0.0 target_time = time_animation current_character.real_position = character_position current_character.real_scale = character_scale current_character.real_alpha = 1.0 current_character.real_darkened = 0.0 current_character.status = Character.WHERE_CHARACTERS.FREE _: target_scale = Vector2(0.8, 0.8) target_alpha = 0.0 target_time = time_animation / 2.0 current_character.real_position = Vector2(0.0, 0.0) current_character.real_scale = Vector2(0.8, 0.8) current_character.real_alpha = 0.0 current_character.real_darkened = 0.0 current_character.status = Character.WHERE_CHARACTERS.HIDE if focus_mode == true: target_scale = target_scale + (focus_scale if current_character.is_focus == true else Vector2.ZERO) target_darkened = target_darkened + (focus_darkened if current_character.is_focus == false else 0.0) current_character.sprite.set_target(target_position, target_scale, target_alpha, target_darkened, target_time) func skip_animation() -> void: for name_character in characters: var character: Character = characters[name_character] character.sprite.skip_animation() func focus_character(character_names: Array) -> void: if focus_mode == true: for current_character_name in characters: characters[current_character_name].is_focus = false if characters[current_character_name].status == Character.WHERE_CHARACTERS.HIDE: continue var target_position: Vector2 var target_scale: Vector2 var target_alpha: float var target_time: float var target_darkened: float if current_character_name in character_names: target_position = characters[current_character_name].real_position target_scale = characters[current_character_name].real_scale + focus_scale target_alpha = characters[current_character_name].real_alpha target_darkened = 0.0 target_time = time_animation characters[current_character_name].is_focus = true else: target_position = characters[current_character_name].real_position target_scale = characters[current_character_name].real_scale target_alpha = characters[current_character_name].real_alpha target_darkened = characters[current_character_name].real_darkened + focus_darkened target_time = time_animation characters[current_character_name].sprite.set_target(target_position, target_scale, target_alpha, target_darkened, target_time) func set_focus_mode(value: bool) -> void: focus_mode = value if value == false: for character_name in characters: characters[character_name].is_focus = false if characters[character_name].status == Character.WHERE_CHARACTERS.HIDE: continue var target_position = characters[character_name].real_position var target_scale = characters[character_name].real_scale var target_alpha = characters[character_name].real_alpha var target_darkened = characters[character_name].real_darkened var target_time = time_animation characters[character_name].sprite.set_target(target_position, target_scale, target_alpha, target_darkened, target_time) func get_size() -> Vector2: return Vector2(CurrentSubViewport.size) func get_aspect() -> float: return aspect func set_aspect(new_aspect: float) -> void: aspect = new_aspect