Pārlūkot izejas kodu

Interrupt round on click

DricomDragon 3 gadi atpakaļ
vecāks
revīzija
482d9c3430
3 mainītis faili ar 22 papildinājumiem un 1 dzēšanām
  1. 1 1
      godot/scenes/main.tscn
  2. 15 0
      godot/scripts/Ball.gd
  3. 6 0
      godot/scripts/Launcher.gd

+ 1 - 1
godot/scenes/main.tscn

@@ -91,7 +91,7 @@ tile_set = SubResource( 6 )
 cell_size = Vector2( 40, 20 )
 cell_custom_transform = Transform2D( 40, 0, 0, 20, 0, 0 )
 collision_layer = 4
-collision_mask = 9
+collision_mask = 8
 format = 1
 script = ExtResource( 6 )
 

+ 15 - 0
godot/scripts/Ball.gd

@@ -1,11 +1,26 @@
 class_name Ball
 extends RigidBody2D
 
+
 signal kace_contact
 
+
+const brick_layer = 2
+const interrupt_speed = 500
+
+
+func go_down_unstopped():
+	linear_velocity.y = interrupt_speed
+	linear_velocity = linear_velocity.normalized() * interrupt_speed
+	set_collision_mask_bit(brick_layer, false)
+
+
 func _integrate_forces(state :  Physics2DDirectBodyState):
 	for i in range(state.get_contact_count()):
 		var contact_pos = state.get_contact_local_position(i)
 		emit_signal("kace_contact", contact_pos)
 
 
+func _on_Launcher_interrupt_wave():
+	go_down_unstopped()
+

+ 6 - 0
godot/scripts/Launcher.gd

@@ -3,11 +3,13 @@ extends Node2D
 signal get_firing
 signal is_full
 signal gain_new_bullet
+signal interrupt_wave
 
 enum State {
 	READY,
 	FIRING,
 	WAITING,
+	INTERRUPTING,
 }
 
 export var BULLET_SPEED = 500.0
@@ -41,6 +43,9 @@ func trigger(aim:Vector2):
 		current_state = State.FIRING
 		target.position = aim
 		emit_signal("get_firing")
+	elif (current_state == State.WAITING):
+		current_state = State.INTERRUPTING
+		emit_signal("interrupt_wave")
 
 
 func shoot():
@@ -51,6 +56,7 @@ func shoot():
 		add_child(bullet)
 		bullet.connect("tree_exited", self, "_on_Ball_tree_exited")
 		bullet.connect("kace_contact", grid, "_on_Ball_kace_contact")
+		self.connect("interrupt_wave", bullet, "_on_Launcher_interrupt_wave")
 
 
 func gain_new_bullet():