@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 %AnimationPlayer.play("show") func hide_rewards(): showing_rewards = 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 = "Discover %s" % new_plant_type.name info.text = "%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 = "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()