163 lines
4.7 KiB
GDScript
163 lines
4.7 KiB
GDScript
extends Node2D
|
|
|
|
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 ;
|
|
|
|
InitWater();
|
|
|
|
if Dialogic.get_variable("ItIsDay") == "true":
|
|
$Day.visible = true;
|
|
$Night.visible = false;
|
|
|
|
var sfxPath = "res://resources/audio/sfx/Mayak_day.ogg"
|
|
get_tree().root.get_node("Root").SetSFXforBGM(sfxPath)
|
|
|
|
GallerySingleton.AddBackground("Scene12");
|
|
else :
|
|
$Day.visible = false;
|
|
$Night.visible = true;
|
|
|
|
var sfxPath = "";
|
|
var value = Dialogic.get_variable("TimelineSave");
|
|
if value == "Timeline_120_front" or value == "Timeline_before_141":
|
|
sfxPath = "res://resources/audio/sfx/Rain Loop.ogg"
|
|
else :
|
|
sfxPath = "res://resources/audio/sfx/Mayak_night.ogg"
|
|
|
|
get_tree().root.get_node("Root").SetSFXforBGM(sfxPath)
|
|
|
|
var player = get_tree().root.get_node("/root/BgmScene/TweenBGMsfx/BGMStreamPlayer");
|
|
$Lightning.Init(1, player);
|
|
|
|
GallerySingleton.AddBackground("Scene12_n");
|
|
|
|
|
|
isDead = false
|
|
|
|
var dialogicNode = get_parent().get_parent().get_node("Game").get_child(0).get_child(0)
|
|
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 _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:
|
|
"death":
|
|
$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 InitWater():
|
|
SceneLoader.connect("on_scene_loaded", self, "WaterLoaded");
|
|
SceneLoader.load_scene("res://resources/customControls/Water/Scene12/Water.tscn");
|
|
|
|
func WaterLoaded(obj):
|
|
if obj.path != "res://resources/customControls/Water/Scene12/Water.tscn":
|
|
return ;
|
|
add_child(obj.instance);
|
|
move_child(obj.instance, 2)
|
|
|
|
obj.instance.play("default");
|
|
|
|
SceneLoader.disconnect("on_scene_loaded", self, "WaterLoaded");
|
|
|
|
func InitForGallery()->Array:
|
|
scale = Vector2(0.5, 0.5)
|
|
|
|
InitGalleryWater();
|
|
|
|
$Day.visible = true;
|
|
$Night.visible = false;
|
|
|
|
if not GallerySingleton.HaveBackground("Scene12_n"):
|
|
return [];
|
|
|
|
return ["ui_day", "ui_night"]
|
|
|
|
func SetSettings(setting):
|
|
if setting == tr("ui_day"):
|
|
$Day.visible = true;
|
|
$Night.visible = false;
|
|
else :
|
|
$Day.visible = false;
|
|
$Night.visible = true;
|
|
|
|
var thread
|
|
|
|
func InitGalleryWater():
|
|
if has_node("Water"):
|
|
return
|
|
|
|
if thread == null:
|
|
thread = Thread.new();
|
|
|
|
thread.start(self, "GalleryWater");
|
|
|
|
func GalleryWater():
|
|
var water = load("res://resources/customControls/Water/Scene12/Water.tscn").instance();
|
|
add_child(water);
|
|
move_child(water, 2)
|
|
water.scale = Vector2(3, 3);
|
|
water.play("default");
|