Prechádzať zdrojové kódy

Shoot a row of balls

DricomDragon 3 rokov pred
rodič
commit
663d5f2f08
2 zmenil súbory, kde vykonal 34 pridanie a 3 odobranie
  1. 6 0
      godot/scenes/main.tscn
  2. 28 3
      godot/scripts/Launcher.gd

+ 6 - 0
godot/scenes/main.tscn

@@ -82,4 +82,10 @@ texture = ExtResource( 5 )
 [node name="Source" type="Sprite" parent="Launcher"]
 position = Vector2( 200, 400 )
 texture = ExtResource( 1 )
+
+[node name="ShootDelay" type="Timer" parent="Launcher"]
+wait_time = 0.3
+one_shot = true
 [connection signal="body_entered" from="Catcher" to="Catcher" method="_on_Catcher_body_entered"]
+[connection signal="get_firing" from="Launcher" to="Launcher" method="_on_Launcher_get_firing"]
+[connection signal="timeout" from="Launcher/ShootDelay" to="Launcher" method="_on_ShootDelay_timeout"]

+ 28 - 3
godot/scripts/Launcher.gd

@@ -1,5 +1,7 @@
 extends Node2D
 
+signal get_firing
+
 enum State {
 	READY,
 	FIRING,
@@ -10,16 +12,26 @@ const BULLET_SPEED = 200.0
 
 var _ballScene = preload("res://scenes/Ball.tscn")
 
+var nbAmmo = 5
+
 onready var target = $Target
 onready var source = $Source
+onready var shootDelay = $ShootDelay
+
+onready var current_state = State.READY
 
-onready var current_state = State.WAITING
 
 func _input(event):
 	if event is InputEventMouseButton and event.is_pressed() :
+		trigger(event.position)
+
+
+func trigger(aim:Vector2):
+	if (current_state == State.READY):
 		current_state = State.FIRING
-		target.position = event.position
-		shoot()
+		target.position = aim
+		emit_signal("get_firing")
+
 
 func shoot():
 		var bullet = _ballScene.instance()
@@ -27,3 +39,16 @@ func shoot():
 		bullet.linear_velocity = (target.position - source.position).normalized()
 		bullet.linear_velocity *= BULLET_SPEED
 		add_child(bullet)
+
+
+func _on_ShootDelay_timeout():
+	shoot()
+	nbAmmo -= 1
+	if (nbAmmo == 0):
+		current_state = State.WAITING
+	else:
+		emit_signal("get_firing")
+
+
+func _on_Launcher_get_firing():
+	shootDelay.start()