Browse Source

Destroy brick at impact

DricomDragon 3 years ago
parent
commit
99b5086fbe
4 changed files with 30 additions and 13 deletions
  1. 1 0
      godot/scenes/Ball.tscn
  2. 12 12
      godot/scenes/main.tscn
  3. 14 0
      godot/scripts/Ball.gd
  4. 3 1
      godot/scripts/Launcher.gd

+ 1 - 0
godot/scenes/Ball.tscn

@@ -16,6 +16,7 @@ radius = 5.0
 mode = 2
 physics_material_override = SubResource( 1 )
 gravity_scale = 0.0
+contacts_reported = 1
 linear_velocity = Vector2( 100, 100 )
 linear_damp = 0.0
 script = ExtResource( 2 )

+ 12 - 12
godot/scenes/main.tscn

@@ -16,6 +16,9 @@ extents = Vector2( 50, 300 )
 [sub_resource type="RectangleShape2D" id=3]
 extents = Vector2( 300, 50 )
 
+[sub_resource type="RectangleShape2D" id=6]
+extents = Vector2( 200, 50 )
+
 [sub_resource type="ConvexPolygonShape2D" id=4]
 points = PoolVector2Array( 0, 0, 40, 0, 40, 20, 0, 20 )
 
@@ -37,10 +40,7 @@ points = PoolVector2Array( 0, 0, 40, 0, 40, 20, 0, 20 )
 } ]
 0/z_index = 0
 
-[sub_resource type="RectangleShape2D" id=6]
-extents = Vector2( 200, 50 )
-
-[node name="Node2D" type="Node2D"]
+[node name="Root" type="Node2D"]
 
 [node name="Walls" type="StaticBody2D" parent="."]
 physics_material_override = SubResource( 1 )
@@ -57,14 +57,6 @@ shape = SubResource( 2 )
 position = Vector2( 200, -50 )
 shape = SubResource( 3 )
 
-[node name="Grid" type="TileMap" parent="."]
-mode = 2
-tile_set = SubResource( 5 )
-cell_size = Vector2( 40, 20 )
-cell_custom_transform = Transform2D( 40, 0, 0, 20, 0, 0 )
-format = 1
-tile_data = PoolIntArray( 65540, 0, 0, 65541, 0, 0, 393217, 0, 0, 393218, 0, 0, 393223, 0, 0, 393224, 0, 0, 458753, 0, 0, 458754, 0, 0, 458759, 0, 0, 458760, 0, 0, 524289, 0, 0, 524290, 0, 0, 524295, 0, 0, 524296, 0, 0, 720899, 0, 0, 720900, 0, 0, 720901, 0, 0, 720902, 0, 0 )
-
 [node name="Catcher" type="Area2D" parent="."]
 position = Vector2( 200, 470 )
 script = ExtResource( 3 )
@@ -75,6 +67,14 @@ shape = SubResource( 6 )
 [node name="Launcher" type="Node2D" parent="."]
 script = ExtResource( 4 )
 
+[node name="Grid" type="TileMap" parent="Launcher"]
+mode = 2
+tile_set = SubResource( 5 )
+cell_size = Vector2( 40, 20 )
+cell_custom_transform = Transform2D( 40, 0, 0, 20, 0, 0 )
+format = 1
+tile_data = PoolIntArray( 65540, 0, 0, 65541, 0, 0, 393217, 0, 0, 393218, 0, 0, 393223, 0, 0, 393224, 0, 0, 458753, 0, 0, 458754, 0, 0, 458759, 0, 0, 458760, 0, 0, 524289, 0, 0, 524290, 0, 0, 524295, 0, 0, 524296, 0, 0, 720899, 0, 0, 720900, 0, 0, 720901, 0, 0, 720902, 0, 0 )
+
 [node name="Target" type="Sprite" parent="Launcher"]
 position = Vector2( 200, 400 )
 texture = ExtResource( 5 )

+ 14 - 0
godot/scripts/Ball.gd

@@ -1,3 +1,17 @@
 class_name Ball
 extends RigidBody2D
 
+signal kace_broken
+
+var grid:TileMap
+
+func _integrate_forces(state :  Physics2DDirectBodyState):
+	for i in range(state.get_contact_count()):
+		var contact_pos = state.get_contact_local_position(i)
+		var tile_pos = grid.world_to_map(contact_pos)
+		var cell = grid.get_cellv(tile_pos)
+		if cell != TileMap.INVALID_CELL and cell == 0:
+			grid.set_cellv(tile_pos, -1)
+			emit_signal("kace_broken")
+
+

+ 3 - 1
godot/scripts/Launcher.gd

@@ -12,12 +12,13 @@ const BULLET_SPEED = 300.0
 
 var _ballScene = preload("res://scenes/Ball.tscn")
 
-var nbAmmo = 5
+var nbAmmo = 1
 var nbStorage = 0
 
 onready var target = $Target
 onready var source = $Source
 onready var shootDelay = $ShootDelay
+onready var grid = $Grid
 
 onready var current_state = State.READY
 
@@ -39,6 +40,7 @@ func shoot():
 		bullet.position = source.position
 		bullet.linear_velocity = (target.position - source.position).normalized()
 		bullet.linear_velocity *= BULLET_SPEED
+		bullet.grid = grid
 		add_child(bullet)
 		bullet.connect("tree_exited", self, "_on_Ball_tree_exited")