seeding-planets/gui/game/quota_reward/scripts/quota_reward.gd
Zacharie Guet dbe8f03531 fix post-proto
* ajout d'un fondu de musique au changement de phase
* résolution de bugs en tout genre
2025-11-14 16:43:52 +01:00

125 lines
3.1 KiB
GDScript

@tool
extends CanvasLayer
class_name QuotaReward
const REWARD_CHOICE_SCENE : PackedScene = preload("res://gui/game/quota_reward/quota_reward_choice/quota_reward_choice.tscn")
signal reward_chosen
var showing_rewards: bool = false
var rewards : Array[QuotaReward.RewardData] = []
func _ready():
%RewardChoiceContainer.visible = false
func show_rewards():
showing_rewards = true
get_tree().paused = true
%AnimationPlayer.play("show")
func hide_rewards():
showing_rewards = false
get_tree().paused = false
%AnimationPlayer.play_backwards("show")
func generate_rewards(nb : int = 3):
var new_rewards : Array[QuotaReward.RewardData] = []
var max_retry = 20
while len(new_rewards) < nb or max_retry < 0:
max_retry -= 1
var new_reward = (
generate_discover_plant_reward()
if len(GameInfo.game_data.unlocked_plant_types) == 0 or randi() % 2 == 0
else generate_evolution_plant_reward()
)
if new_rewards.find_custom(func(r): return r.reward_info().title == new_reward.reward_info().title) == -1:
new_rewards.append(new_reward)
else :
max_retry -= 1
rewards = new_rewards
func generate_rewards_choices():
for c in %ChoicesContainer.get_children():
c.queue_free()
for r in rewards:
var reward_choice : QuotaRewardChoice = REWARD_CHOICE_SCENE.instantiate() as QuotaRewardChoice
reward_choice.info = r.reward_info()
reward_choice.card_clicked.connect(
func (_c):
if showing_rewards: choose_reward(r)
)
%ChoicesContainer.add_child(reward_choice)
func generate_discover_plant_reward() -> RewardData:
return DiscoverPlantReward.new(
GameInfo.game_data.get_locked_plant_types().pick_random()
)
func generate_evolution_plant_reward() -> RewardData:
return EvolvePlantReward.new(
GameInfo.game_data.unlocked_plant_types.pick_random().get_available_evolution().pick_random()
)
func choose_reward(r : RewardData):
r.reward()
reward_chosen.emit()
hide_rewards()
func trigger_reward():
generate_rewards()
generate_rewards_choices()
show_rewards()
class RewardData:
func reward_info() -> QuotaRewardChoiceInfo:
return null
func reward():
pass
class DiscoverPlantReward extends RewardData:
var new_plant_type : PlantType
func _init(_new_plant_type):
new_plant_type = _new_plant_type
func reward_info() -> QuotaRewardChoiceInfo:
var info = QuotaRewardChoiceInfo.new()
info.title = tr("DISCOVER_%s") % new_plant_type.name
info.text = tr("%s_SEEDS_CAN_NOW_BE_FOUND") % new_plant_type.name
info.card_info = new_plant_type.card_info()
return info
func reward():
GameInfo.game_data.unlock_plant_type(new_plant_type)
class EvolvePlantReward extends RewardData:
var plant_evolution : PlantType.Evolution
func _init(_plant_evolution):
plant_evolution = _plant_evolution
func reward_info() -> QuotaRewardChoiceInfo:
var info = QuotaRewardChoiceInfo.new()
info.title = tr("EVOLVE_%s") % plant_evolution.plant_type.name
info.text = plant_evolution.get_description()
var preview_evolved_plant = plant_evolution.plant_type.duplicate_deep()
plant_evolution.evolve(preview_evolved_plant)
info.card_info = preview_evolved_plant.card_info()
return info
func reward():
plant_evolution.evolve()