mirror of
https://github.com/anthonyaxenov/balloon-pop.git
synced 2024-10-21 14:23:22 +00:00
64 lines
2.1 KiB
GDScript
64 lines
2.1 KiB
GDScript
extends Area2D
|
|
|
|
signal pop
|
|
|
|
var increase # speed ratio
|
|
var current_color # name of current animation (sprite set) of AnimatedSprite
|
|
var random = RandomNumberGenerator.new() # randomizer
|
|
# harcoded names of AnimatedSprite's animations
|
|
const colors = ['blue', 'green', 'orange', 'pink', 'purple', 'red', 'yellow']
|
|
|
|
# Get random animation except current one
|
|
func get_color():
|
|
var new_color = colors[random.randi_range(0, colors.size() - 1)]
|
|
if new_color == current_color:
|
|
new_color = get_color()
|
|
return new_color
|
|
|
|
# Hide balloon when its pop sound is finished
|
|
func hide_balloon():
|
|
print("Sound finished")
|
|
queue_free()
|
|
|
|
# Initialize scene
|
|
func _init():
|
|
random.randomize()
|
|
current_color = get_color()
|
|
increase = random.randf_range(1, 1.75)
|
|
|
|
# When node tree has been created and initialized
|
|
func _ready():
|
|
# set random sprite set to balloon
|
|
$AnimatedSprite.set_animation(current_color)
|
|
print("New balloon: ", current_color)
|
|
# connect "pop" signal to handler in Playground
|
|
connect('pop', get_parent(), 'update_score')
|
|
# the "finished" signal of every PopSoundN must hide current balloon
|
|
for i in range(1, 5):
|
|
get_node('PopSound' + str(i)).connect('finished', self, 'hide_balloon')
|
|
|
|
# On every Timer's interval we move current balloon up
|
|
func _on_Timer_timeout():
|
|
position.y -= increase
|
|
# we need to detect how far balloon from upper edge is and destroy it
|
|
# ballon becomes invisible when its first scaled frame height totally above Playground
|
|
var height = $AnimatedSprite.frames.get_frame(current_color, 0).get_size().y * scale.y
|
|
var y = position.y + height
|
|
if y < 0:
|
|
print("Die (out of playground at ", position.y, ")")
|
|
queue_free()
|
|
|
|
# Detect click/touch event on balloon
|
|
func _on_Balloon_input_event(_viewport, event, _shape_idx):
|
|
if event is InputEventMouseButton or event is InputEventScreenTouch:
|
|
if event.is_pressed():
|
|
print("Click: ", event.as_text())
|
|
# start pop animation
|
|
$AnimatedSprite.play()
|
|
# play pop sound
|
|
var sound_idx = random.randi_range(1, 5)
|
|
get_node("PopSound" + str(sound_idx)).play()
|
|
print("Sound started: ", sound_idx)
|
|
# emit poop signal so that we can increase score counter in Playground
|
|
emit_signal('pop')
|