35 lines
1.1 KiB
GDScript
35 lines
1.1 KiB
GDScript
extends AnimatableBody2D
|
|
|
|
enum Reward { COIN, APPLE, PEAR, GRAPES }
|
|
@export var reward: Reward = Reward.COIN
|
|
|
|
const REWARD_SCENES = {
|
|
Reward.COIN: "res://scenes/coin.tscn",
|
|
Reward.APPLE: "res://scenes/apple.tscn",
|
|
Reward.PEAR: "res://scenes/pear.tscn",
|
|
Reward.GRAPES: "res://scenes/grapes.tscn",
|
|
}
|
|
|
|
@onready var sound_player: AnimationPlayer = $SoundPlayer
|
|
@onready var reward_collision: CollisionShape2D = $RewardZone/RewardCollision
|
|
@onready var reward_zone: Area2D = $RewardZone
|
|
|
|
func _ready() -> void:
|
|
reward_zone.body_entered.connect(_on_rewardzone_body_entered)
|
|
|
|
func _on_rewardzone_body_entered(body: Node) -> void:
|
|
if body.is_in_group("player"):
|
|
sound_player.play("reward")
|
|
reward_collision.set_deferred("disabled", true)
|
|
call_deferred("_spawn_reward")
|
|
|
|
func _spawn_reward() -> void:
|
|
var reward_scene = load(REWARD_SCENES[reward])
|
|
var reward_node = reward_scene.instantiate()
|
|
get_parent().add_child(reward_node)
|
|
reward_node.global_position = global_position + Vector2(0, -16)
|
|
if "game_manager" in reward_node:
|
|
reward_node.game_manager = get_tree().get_first_node_in_group("game_manager")
|
|
if reward_node.has_method("popup"):
|
|
reward_node.popup()
|