extends Node2D const fadeTime = 3.0 const zoomStart = 1.0 const zoomEnd = 0.97 const bloodStart = 0.2 const bloodEnd = 0.9 const timeParam = 1.7 var isDead var bloodIncrement var zoomIncrement var currentZoom var currentEnergy var isIncreasing var screenWidth; var screenHeight; var xOffset; var yOffset func _ready(): if not get_tree().root.has_node("Root"): return ; GallerySingleton.AddImage("Death_knife") var dialogicNode = get_parent().get_parent().get_node("Game").get_child(0).get_child(0) dialogicNode.connect("dialogic_signal", self, "_frame_switch_listener") isDead = false dialogicNode.connect("dialogic_signal", self, "_begin_death") bloodIncrement = (bloodEnd - bloodStart) / timeParam; zoomIncrement = (zoomEnd - zoomStart) / timeParam; currentZoom = zoomStart isIncreasing = true currentEnergy = 0 screenWidth = SettingsSingleton.GetCurrectScreenResolutionVector2().x screenHeight = SettingsSingleton.GetCurrectScreenResolutionVector2().y func InitScene(saveSlot:int): pass func _frame_switch_listener(string): match string: "sprite2": $frame3.self_modulate.a = 0 $frame3.visible = true var tween = $"Tween" tween.interpolate_method(self, "frame3Interpolate", 0, 1, fadeTime, Tween.TRANS_LINEAR, 0) tween.start() "death": $frame1.visible = false var tween = $"Tween" tween.interpolate_method(self, "frame3Interpolate", 1, 0, fadeTime, Tween.TRANS_LINEAR, 0) tween.interpolate_property($Sprite3, "modulate", Color(1, 1, 1, 1), Color.black, fadeTime, Tween.TRANS_LINEAR, 0) tween.start() func _process(delta): if (isDead): if (isIncreasing): if (currentEnergy <= bloodEnd): currentEnergy += bloodIncrement * delta currentZoom += zoomIncrement * delta $death / Light2D.self_modulate.a = currentEnergy xOffset = (1 - currentZoom) * ($death / Polygon2D.get_global_transform_with_canvas().origin.x) / (screenWidth); print(xOffset) yOffset = (1 - currentZoom) * (screenHeight - $death / Polygon2D.get_global_transform_with_canvas().origin.y) / screenHeight; var offset = Vector2(xOffset, yOffset); var tiling = Vector2(currentZoom, currentZoom) $death / Polygon2D.material.set_shader_param("offset", offset) $death / Polygon2D.material.set_shader_param("tiling", tiling); else : isIncreasing = false if ( not isIncreasing): if (currentEnergy >= bloodStart): currentEnergy -= bloodIncrement * delta currentZoom -= zoomIncrement * delta $death / Light2D.self_modulate.a = currentEnergy xOffset = (1 - currentZoom) * ($death / Polygon2D.get_global_transform_with_canvas().origin.x) / (screenWidth); yOffset = (1 - currentZoom) * (screenHeight - $death / Polygon2D.get_global_transform_with_canvas().origin.y) / screenHeight; var offset = Vector2(xOffset, yOffset); $death / Polygon2D.material.set_shader_param("offset", offset) $death / Polygon2D.material.set_shader_param("tiling", Vector2(currentZoom, currentZoom)); else : isIncreasing = true else :pass func _begin_death(string): match string: "death2": $death.visible = true; var tween = $death.get_child(0).get_child(0) var light = $death.get_child(0) tween.interpolate_method(self, "bloodInterpolate", 0.0, bloodStart, 1.0, Tween.TRANS_LINEAR, 0); tween.start() yield ($death.get_child(0).get_child(0), "tween_all_completed") currentEnergy = bloodStart $death.get_child(0).self_modulate.a = bloodStart isDead = true; func bloodInterpolate(value): $death / Light2D.self_modulate.a = value; func frame3Interpolate(value): $frame3.self_modulate.a = value func InitForGallery()->Array: $frame1.visible = true; $frame2.visible = false; $frame3.visible = false; scale = Vector2(0.5, 0.5) return ["ui_gallery_fall_1", "ui_gallery_fall_2", "ui_gallery_fall_3"]; func SetSettings(setting): if setting == tr("ui_gallery_fall_1"): $frame1.visible = true; $frame2.visible = false; $frame3.visible = false; elif setting == tr("ui_gallery_fall_2"): $frame1.visible = false; $frame2.visible = true; $frame3.visible = false; elif setting == tr("ui_gallery_fall_3"): $frame1.visible = false; $frame2.visible = false; $frame3.visible = true;