Files
seeding-planets/gui/game/scripts/game_gui.gd
Zacharie Guet 83d462f2f4 changement du scene manager, amélioration du cockpit et autres
* refonte du scene manager
* refonte du audio manager
* premier rework des plantes
* nettoyage des dossiers/fichiers
* renommage de planète en region
* fix des run
2026-01-23 18:06:27 +01:00

112 lines
3.4 KiB
GDScript

extends CanvasLayer
class_name GameGui
const SCORE_ICON : Texture = preload("res://common/icons/growth.svg")
var score_mirror :
set(v):
score_mirror = v
score_update(true)
func _ready():
GameInfo.game_data.current_region_data.updated.connect(_on_region_updated)
GameInfo.game_data.current_region_data.plant_changing_score.connect(_on_plant_changing_score)
GameInfo.game_data.player_data.updated.connect(_on_player_updated)
GameInfo.game_data.current_region_data.pass_day_ended.connect(_on_region_pass_day_ended)
score_mirror = GameInfo.game_data.current_region_data.get_score()
charge_update(GameInfo.game_data.current_region_data)
player_update(GameInfo.game_data.player_data, false)
%EnergyInfo.reset_size()
func _on_player_updated(player_data : PlayerData):
player_update(player_data)
func player_update(player_data : PlayerData, with_animation = true):
%EnergyInfo.update(
player_data.energy,
player_data.max_energy,
with_animation
)
func _on_region_updated(region_data : RegionData):
charge_update(region_data)
func charge_update(region_data : RegionData):
%ChargeCount.text = tr("%d_CHARGE_LEFT") % (region_data.charges)
func score_update(with_animation = true):
var objective = GameInfo.game_data.current_region_data.objective
var objective_progression_percent : float = (float(score_mirror) / float(objective)) * 100
%ObjectiveProgressText.text = "%d/%d" % [score_mirror, objective]
if with_animation:
get_tree().create_tween().tween_property(
%QuotaProgressBar,
"value",
objective_progression_percent,
0.5,
)
else: %QuotaProgressBar.value = objective_progression_percent
func _on_plant_changing_score(plant_data: PlantData, amount : int):
if amount <= 0:
score_mirror += amount
else :
for i in range(amount):
var camera = get_viewport().get_camera_2d()
var screen_size = get_viewport().get_visible_rect().size
spawn_score_particle(
plant_data.position - camera.global_position + screen_size / 2,
%QuotaProgressBar.global_position + %QuotaProgressBar.size / 2,
0.8
)
await get_tree().create_timer(0.3 / max(1,i)).timeout
func spawn_score_particle(
from_position,
to_position,
duration
):
if GameInfo.game_data.current_region_data.in_passing_day_animation:
await GameInfo.game_data.current_region_data.pass_day_ended
var sprite_particle = Sprite2D.new()
sprite_particle.texture = SCORE_ICON
%ScoreParticles.add_child(sprite_particle)
sprite_particle.position = from_position
var tween = get_tree().create_tween()
tween.set_trans(Tween.TransitionType.TRANS_SPRING)
tween.tween_property(
sprite_particle,
"position",
to_position,
duration
)
await tween.finished
score_mirror += 1
sprite_particle.queue_free()
func _on_player_action_tried_without_energy():
$AnimationPlayer.play("no_energy_left")
func _on_player_upgraded():
$EffectAnimation.play("upgrade")
func _on_region_pass_day_ended(region:Region):
if region.data.charges == 1:
%Announce.announce(
tr("LAST_RECHARGE"),
tr("%d_GARDEN_SCORE_LEFT") % [region.data.objective - region.garden.get_score()],
Announce.RED_COLOR
)