ajout d'une animation de recharge et réparation du crash au chargement de chunk
This commit is contained in:
50
gui/game/pass_day/pass_day.tscn
Normal file
50
gui/game/pass_day/pass_day.tscn
Normal 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
|
||||
113
gui/game/pass_day/scripts/pass_day.gd
Normal file
113
gui/game/pass_day/scripts/pass_day.gd
Normal 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
|
||||
1
gui/game/pass_day/scripts/pass_day.gd.uid
Normal file
1
gui/game/pass_day/scripts/pass_day.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://2qomrdxbvxqa
|
||||
21
gui/game/pass_day/scripts/pass_day_background.gd
Normal file
21
gui/game/pass_day/scripts/pass_day_background.gd
Normal 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)
|
||||
1
gui/game/pass_day/scripts/pass_day_background.gd.uid
Normal file
1
gui/game/pass_day/scripts/pass_day_background.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://i7glvbe8pdr8
|
||||
Reference in New Issue
Block a user