ajout d'une animation de recharge et réparation du crash au chargement de chunk

This commit is contained in:
2026-01-16 12:28:36 +01:00
parent 74d2d0de3a
commit ff4feacea3
25 changed files with 431 additions and 236 deletions

View File

@@ -0,0 +1,50 @@
[gd_scene load_steps=6 format=3 uid="uid://yk78ubpu5ghq"]
[ext_resource type="Script" uid="uid://2qomrdxbvxqa" path="res://gui/game/pass_day/scripts/pass_day.gd" id="1_0pm4g"]
[ext_resource type="Shader" uid="uid://cuni3ggtw2uuy" path="res://common/vfx/materials/shaders/blur.gdshader" id="1_v570a"]
[ext_resource type="Script" uid="uid://i7glvbe8pdr8" path="res://gui/game/pass_day/scripts/pass_day_background.gd" id="2_bhfpo"]
[ext_resource type="PackedScene" uid="uid://brfsapvj2quxm" path="res://gui/game/energy_info/energy_info.tscn" id="2_feyaf"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_27lg1"]
shader = ExtResource("1_v570a")
shader_parameter/strength = 0.1
shader_parameter/mix_percentage = 0.0
[node name="PassDay" type="Control"]
visible = false
z_index = 100
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_0pm4g")
[node name="Blur" type="ColorRect" parent="."]
unique_name_in_owner = true
physics_interpolation_mode = 0
material = SubResource("ShaderMaterial_27lg1")
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
script = ExtResource("2_bhfpo")
blur_strength = 0.1
[node name="EnergyPassDayInfo" parent="." instance=ExtResource("2_feyaf")]
unique_name_in_owner = true
modulate = Color(1, 1, 1, 0)
layout_mode = 1
anchors_preset = 14
anchor_top = 0.5
anchor_right = 1.0
anchor_bottom = 0.5
offset_top = -37.5
offset_right = 0.0
offset_bottom = 37.5
grow_horizontal = 2
grow_vertical = 2

View File

@@ -0,0 +1,113 @@
@tool
extends Control
class_name PassDay
const BLUR_STRENGTH = 10
const BLUR_MIX_PERCENTAGE = 0.8
const TIME_BY_ENERGY = 0.7
const TIME_MARGIN = 0.5
signal max_energy_reached()
signal animation_appeared
signal animation_disappeared
@export_tool_button("Pass Day", "Callable") var pass_day_action = pass_day_animation
@export_tool_button("Appear", "Callable") var appear_action = appear
@export var from_energy = 0
@export var max_energy = 3
var current_energy = 0
var time_since_recharging = 0.
var recharging = false
var is_animation_appeared := false
var is_animation_disappeared := false
func _ready():
hide()
setup_energy_values()
func _process(delta):
if recharging:
time_since_recharging += delta
var new_current_energy = from_energy + roundi(time_since_recharging/TIME_BY_ENERGY)
if new_current_energy > max_energy:
max_energy_reached.emit()
elif (new_current_energy != current_energy):
%EnergyPassDayInfo.update(new_current_energy, max_energy, true)
print("Call energy info with %d/%d" % [new_current_energy, max_energy])
current_energy = new_current_energy
func setup_energy_values():
if not Engine.is_editor_hint():
from_energy = GameInfo.game_data.player_data.energy
max_energy = GameInfo.game_data.player_data.max_energy
current_energy = from_energy
func pass_day_animation():
setup_energy_values()
is_animation_appeared=false
is_animation_disappeared=false
%EnergyPassDayInfo.update(from_energy, max_energy, false)
print("Call energy info with %d/%d" % [from_energy, max_energy])
await appear()
is_animation_appeared = true
animation_appeared.emit()
await get_tree().create_timer(TIME_MARGIN).timeout
recharging = true
time_since_recharging = 0.
await max_energy_reached
await get_tree().create_timer(TIME_MARGIN).timeout
await disappear()
is_animation_disappeared=true
animation_disappeared.emit()
recharging = false
func appear():
show()
add_tween(
"blur_mix_percentage",
%Blur,
BLUR_MIX_PERCENTAGE,
0.5
)
await add_tween(
"blur_strength",
%Blur,
BLUR_STRENGTH,
0.5
).finished
await %EnergyPassDayInfo.appear()
func disappear():
await %EnergyPassDayInfo.disappear()
add_tween(
"blur_mix_percentage",
%Blur,
0.0,
0.5
)
await add_tween(
"blur_strength",
%Blur,
0.1,
0.5
).finished
hide()
func add_tween(
property : String,
target: Node,
value : Variant,
seconds: float = 1.,
transition_type: Tween.TransitionType = Tween.TransitionType.TRANS_LINEAR
) -> Tween:
var tween : Tween = get_tree().create_tween()
tween.set_trans(transition_type)
tween.tween_property(target, property, value, seconds)
tween.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS)
return tween

View File

@@ -0,0 +1 @@
uid://2qomrdxbvxqa

View File

@@ -0,0 +1,21 @@
@tool
extends ColorRect
class_name PassDayBackground
@export var blur_strength := 0. :
set(v):
blur_strength = v
if is_node_ready():
update_shader_material_parameter()
@export var blur_mix_percentage := 0. :
set(v):
blur_mix_percentage = v
if is_node_ready():
update_shader_material_parameter()
func _ready():
update_shader_material_parameter()
func update_shader_material_parameter():
material.set_shader_parameter("strength", blur_strength)
material.set_shader_parameter("mix_percentage", blur_mix_percentage)

View File

@@ -0,0 +1 @@
uid://i7glvbe8pdr8