Bladeren bron

Create a new row at the end of each round

DricomDragon 3 jaren geleden
bovenliggende
commit
ed1e624eb4
3 gewijzigde bestanden met toevoegingen van 43 en 5 verwijderingen
  1. 2 0
      godot/scenes/main.tscn
  2. 28 1
      godot/scripts/Grid.gd
  3. 13 4
      godot/scripts/Launcher.gd

+ 2 - 0
godot/scenes/main.tscn

@@ -90,5 +90,7 @@ 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="is_full" from="Launcher" to="Launcher/Grid" method="_on_Launcher_is_full"]
+[connection signal="has_moved" from="Launcher/Grid" to="Launcher" method="_on_Grid_has_moved"]
 [connection signal="kace_broken" from="Launcher/Grid" to="Launcher" method="_on_Grid_kace_broken"]
 [connection signal="timeout" from="Launcher/ShootDelay" to="Launcher" method="_on_ShootDelay_timeout"]

+ 28 - 1
godot/scripts/Grid.gd

@@ -1,14 +1,41 @@
 extends TileMap
 
 signal kace_broken
+signal has_moved
 
 enum Tile {
 	BRICK = 0,
 }
 
+enum State {
+	DONE,
+	MOVING,
+}
+
+var current_state = State.DONE
+
+var current_row = 1
+
+func generate_row():
+	for k in range(10):
+		set_cell(k, -current_row, Tile.BRICK)
+
+func move():
+	current_row += 1
+	position.y += cell_size.y
+
 func _on_Ball_kace_contact(contact_pos:Vector2):
-	var tile_pos = world_to_map(contact_pos)
+	var local_position = to_local(contact_pos)
+	var tile_pos = world_to_map(local_position)
 	var cell = get_cellv(tile_pos)
 	if cell != TileMap.INVALID_CELL and cell == Tile.BRICK:
 		set_cellv(tile_pos, -1)
 		emit_signal("kace_broken")
+
+
+func _on_Launcher_is_full():
+	generate_row()
+	current_state = State.MOVING
+	move()
+	current_state = State.DONE
+	emit_signal("has_moved")

+ 13 - 4
godot/scripts/Launcher.gd

@@ -1,6 +1,7 @@
 extends Node2D
 
 signal get_firing
+signal is_full
 
 enum State {
 	READY,
@@ -49,6 +50,13 @@ func loadBullet(n:int):
 	nbStorage += n
 
 
+func get_ready():
+	current_state = State.READY
+	target.position = source.position
+	nbAmmo = nbStorage
+	nbStorage = 0
+
+
 func _on_ShootDelay_timeout():
 	shoot()
 	nbAmmo -= 1
@@ -65,10 +73,11 @@ func _on_Launcher_get_firing():
 func _on_Ball_tree_exited():
 	loadBullet(1)
 	if (get_tree().get_nodes_in_group("ball").size() == 0):
-		current_state = State.READY
-		target.position = source.position
-		nbAmmo = nbStorage
-		nbStorage = 0
+		emit_signal("is_full")
+
+
+func _on_Grid_has_moved():
+	get_ready()
 
 
 func _on_Grid_kace_broken():