ajout du déblocage/évolutions des plantes (#89) et fix divers
This commit is contained in:
122
gui/game/quota_reward/scripts/quota_reward.gd
Normal file
122
gui/game/quota_reward/scripts/quota_reward.gd
Normal file
@@ -0,0 +1,122 @@
|
||||
@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()
|
||||
1
gui/game/quota_reward/scripts/quota_reward.gd.uid
Normal file
1
gui/game/quota_reward/scripts/quota_reward.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://12kjdou2kp5y
|
||||
Reference in New Issue
Block a user