Dev 0.2.0

* Ajout de la déblocage des mutation du mode infini dans le mode histoire
* Ajout de plus de caverne
* Rework de l'emplacement des distributeurs/cavernes
* Rework de l'influence, plus de clarté sur les plantes influencées
* 4 d'inventaire dans le mode infini
* Fix du tuto de mouvement en 3D
* Déblocage de toutes le mutations à la fin du jeu
* Fix de bug de chargelent de scène multiple
This commit is contained in:
2026-07-26 14:23:20 +02:00
parent ffe6f50ba6
commit dcce13a9e6
28 changed files with 193 additions and 193 deletions
+23 -55
View File
@@ -4,7 +4,7 @@ class_name PlantSprite
const PLANTED_SEED_CROP_WIDTH = 50
const PLANTED_SEED_POS_Y = 0
const PARTICLES_SCENE: PackedScene = preload("res://common/vfx/particles/effect_particles.tscn")
const MODULATE_PLANT_INFLUENCED_COLOR = Color("c599ffff")
const ABOUT_TO_DYE_COLOR := Color("#fca67e")
const ABOUT_TO_DYE_PERIOD := 1.0
@@ -14,14 +14,17 @@ signal harvest_animation_finished
var last_updated_on_state: PlantData.State = PlantData.State.MATURE
var stored_seed_image: Texture = null
var display_lifetime_sprite: bool = false: set = set_display_lifetime_sprite
var sprite_modulate: Color = Color.WHITE: set = set_sprite_modulate
var is_action_affected : bool = false
var is_inspected : bool = false
var is_plant_influenced : bool = false
var is_about_to_die : bool = false
var about_to_dye_tween: Tween
var target_modulate_color := Color.WHITE
var elapsed_time := 0.
func setup_plant_sprite(plant_data: PlantData):
set_display_lifetime_sprite()
%PlantedSeed.texture = PlantTextureBuilder.build_seed_texture(plant_data.plant_name.hash())
update_plant_sprite(plant_data, true)
@@ -35,43 +38,13 @@ func update_plant_sprite(plant_data: PlantData, with_animation = false):
%PlantedSeed.visible = plant_data.get_state() == PlantData.State.PLANTED
%LifetimeProgressBar.value = 100 * (float(plant_data.day) / plant_data.get_lifetime())
# %PlantedSeed.region_rect = Rect2(
# 0,
# PLANTED_SEED_POS_Y,
# %PlantedSeed.texture.get_width(),
# %PlantedSeed.texture.texture.get_height() - PLANTED_SEED_CROP_WIDTH + -1 * PLANTED_SEED_POS_Y,
# )
func generate_mutation_effects(plant: Plant):
for m in plant.data.mutations:
var particles_emitter: EffectParticles = PARTICLES_SCENE.instantiate() as EffectParticles
particles_emitter.setup_particles(
EffectParticles.Parameters.new(
m.get_icon(),
PlantMutation.get_rarity_color(m.get_rarity())
)
)
add_child(particles_emitter)
func start_harvest_animation():
$AnimationPlayer.play("harvest")
await $AnimationPlayer.animation_finished
harvest_animation_finished.emit()
func set_display_lifetime_sprite(d := display_lifetime_sprite):
display_lifetime_sprite = d
# if is_node_ready():
# %LifeTimeSprite.visible = d
func set_sprite_modulate(c := sprite_modulate):
sprite_modulate = c
if is_node_ready():
%Sprite.modulate = c
func affect_preview(is_affected: bool = true):
set_modulate_color(InspectableEntity.MODULATE_AFFECTED_COLOR if is_affected else Color.WHITE, true)
is_action_affected = is_affected
func _on_body_entered(body: Node2D) -> void:
if body is Player && $AnimationPlayer.current_animation != "player_move":
@@ -81,25 +54,20 @@ func play_bump_animation():
%AnimationPlayer.play("bump")
await %AnimationPlayer.animation_finished
func set_modulate_color(color: Color, pause_about_to_dye: bool):
target_modulate_color = color
if about_to_dye_tween:
if pause_about_to_dye and about_to_dye_tween.is_running():
about_to_dye_tween.pause()
modulate = target_modulate_color
elif not pause_about_to_dye and not about_to_dye_tween.is_running():
about_to_dye_tween.play()
elif is_node_ready():
%Sprite.modulate = target_modulate_color
func _process(delta):
elapsed_time += delta
func apply_about_to_dye_effect():
if not about_to_dye_tween:
about_to_dye_tween = create_tween()
about_to_dye_tween.tween_property(%Sprite, "modulate:r", ABOUT_TO_DYE_COLOR.r, ABOUT_TO_DYE_PERIOD).from(target_modulate_color.r)
about_to_dye_tween.parallel().tween_property(%Sprite, "modulate:g", ABOUT_TO_DYE_COLOR.g, ABOUT_TO_DYE_PERIOD).from(target_modulate_color.g)
about_to_dye_tween.parallel().tween_property(%Sprite, "modulate:b", ABOUT_TO_DYE_COLOR.b, ABOUT_TO_DYE_PERIOD).from(target_modulate_color.b)
var target_modulate = Color.WHITE
if is_action_affected:
target_modulate = InspectableEntity.MODULATE_AFFECTED_COLOR
elif is_inspected:
target_modulate = InspectableEntity.MODULATE_INSPECTED_COLOR
elif is_plant_influenced:
target_modulate = MODULATE_PLANT_INFLUENCED_COLOR
elif is_about_to_die:
var blink_value = (cos((elapsed_time * (2 * PI)) * ABOUT_TO_DYE_PERIOD) + 1)/2
target_modulate = target_modulate.lerp(ABOUT_TO_DYE_COLOR, blink_value)
modulate = modulate.lerp(target_modulate, 0.8)
about_to_dye_tween.tween_property(%Sprite, "modulate:r", target_modulate_color.r, ABOUT_TO_DYE_PERIOD).from(ABOUT_TO_DYE_COLOR.r)
about_to_dye_tween.parallel().tween_property(%Sprite, "modulate:g", target_modulate_color.g, ABOUT_TO_DYE_PERIOD).from(ABOUT_TO_DYE_COLOR.g)
about_to_dye_tween.parallel().tween_property(%Sprite, "modulate:b", target_modulate_color.b, ABOUT_TO_DYE_PERIOD).from(ABOUT_TO_DYE_COLOR.b)
about_to_dye_tween.set_loops()