class_name PetBattleVsOverlay extends RefCounted const FRAME_SECONDS := 0.03 const FINAL_FRAME_HOLD_SECONDS := 3.0 const FRAME_TEXTURES := [ preload("res://assets/replacement/pet_battle_vs/vs_0000.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0001.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0002.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0003.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0004.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0005.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0006.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0007.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0008.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0009.png"), preload("res://assets/replacement/pet_battle_vs/vs_0010.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0011.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0012.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0013.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0014.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0015.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0016.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0017.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0018.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0019.png"), preload("res://assets/replacement/pet_battle_vs/vs_0020.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0021.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0022.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0023.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0024.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0025.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0026.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0027.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0028.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0029.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0030.webp"), preload("res://assets/replacement/pet_battle_vs/vs_0031.webp"), ] var _owner: Control var _layer: Control var _frame: TextureRect var _frames: Array[Texture2D] = [] var _playing := false func setup(owner: Control) -> void: _owner = owner _load_frames() _create_layer() func play() -> void: if _owner == null or _frame == null or _frames.is_empty(): return while _playing: await _owner.get_tree().create_timer(0.05).timeout _playing = true _layer.visible = true _frame.modulate = Color(1.0, 1.0, 1.0, 1.0) for texture in _frames: _frame.texture = texture await _owner.get_tree().create_timer(FRAME_SECONDS).timeout await _owner.get_tree().create_timer(FINAL_FRAME_HOLD_SECONDS).timeout _layer.visible = false _playing = false func _load_frames() -> void: _frames.clear() for texture in FRAME_TEXTURES: if texture != null: _frames.append(texture) func _create_layer() -> void: if _owner == null: return _layer = Control.new() _layer.name = "PetBattleVsOverlay" _layer.mouse_filter = Control.MOUSE_FILTER_IGNORE _layer.set_anchors_preset(Control.PRESET_FULL_RECT) _layer.z_index = 2500 _layer.visible = false _owner.add_child(_layer) _frame = TextureRect.new() _frame.name = "Frame" _frame.position = Vector2(0.0, 220.0) _frame.size = Vector2(640.0, 480.0) _frame.expand_mode = TextureRect.EXPAND_IGNORE_SIZE _frame.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED _frame.mouse_filter = Control.MOUSE_FILTER_IGNORE _layer.add_child(_frame)