First (and I hope last) commit
This commit is contained in:
63
Balloon.gd
Normal file
63
Balloon.gd
Normal file
@@ -0,0 +1,63 @@
|
||||
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')
|
||||
Reference in New Issue
Block a user