godot-shooter / commit
Added a small explosion that appears when a bullet hits a body and does damage.
Bullet.gd | 12 ++++++++---- Enemy.gd | 6 +++--- Player.gd | 4 ++-- SmallExplosion.gd | 10 ++++++++++ SmallExplosion.tscn | 38 ++++++++++++++++++++++++++++++++++++++ World.tscn | 5 +++-- 6 files changed, 64 insertions(+), 11 deletions(-) diff --git a/Bullet.gd b/Bullet.gd index 1b28d88..0b18d56 100644 --- a/Bullet.gd +++ b/Bullet.gd @@ -1,19 +1,20 @@ extends Area2D -const utils = preload("res://Utils.gd") +const Utils = preload("res://Utils.gd") +const SmallExplosion = preload("res://SmallExplosion.tscn") export var lifetime_seconds = 2 export var speed = 300 func _ready() -> void: $Timer.wait_time = lifetime_seconds $Timer.start() - utils.log("timer", $Timer) + Utils.log("timer", $Timer) func _physics_process(delta: float) -> void: position += transform.y * speed * delta func on_expiration(): - utils.log("killing bullet") + Utils.log("killing bullet") queue_free() func on_bullet_body_entered(body): @@ -21,6 +22,9 @@ func on_bullet_body_entered(body): var players = tree.get_nodes_in_group("player") var player = players[0] if body.has_method("hurt") && body != player: - utils.log("removing bullet") + Utils.log("removing bullet") body.hurt() + var se = SmallExplosion.instance() + get_parent().add_child(se) + se.transform = transform queue_free() diff --git a/Enemy.gd b/Enemy.gd index 9deefe7..b84d1c3 100644 --- a/Enemy.gd +++ b/Enemy.gd @@ -13,11 +13,11 @@ var velocity = Vector2.ZERO var dead = false -func _process(delta: float) -> void: +func _process(_delta: float) -> void: $Graphics/Alive/Container/HealthLabel.text = "%s / %s" % [health, max_health] $Graphics/Alive/Container.global_rotation = 0 -func _physics_process(delta: float) -> void: +func _physics_process(_delta: float) -> void: if dead: return var players = scene_tree.get_nodes_in_group("player") @@ -54,7 +54,7 @@ func kill(): var explosion = Explosion.instance() explosion.connect("explosion_done", self, "_on_death_explosion_finished") $Graphics.add_child(explosion) - $CollisionPolygon2D.disabled = true + $CollisionPolygon2D.set_deferred("diabled", true) z_index = -1 func _on_death_explosion_finished(): diff --git a/Player.gd b/Player.gd index 7cc0481..6c672e1 100644 --- a/Player.gd +++ b/Player.gd @@ -13,7 +13,7 @@ var velocity = Vector2.ZERO var can_fire = true -func _process(delta: float) -> void: +func _process(_delta: float) -> void: if Input.is_action_just_pressed("exit"): if OS.get_name() == "OSX": get_tree().quit() @@ -36,7 +36,7 @@ func _physics_process(delta: float) -> void: velocity = move_and_slide(velocity) func restart(): - get_tree().reload_current_scene() + var _error = get_tree().reload_current_scene() func handle_mouse_controls(delta: float) -> void: global_rotation = global_position.direction_to(get_global_mouse_position()).angle() + PI/2.0 diff --git a/SmallExplosion.gd b/SmallExplosion.gd new file mode 100644 index 0000000..4a9bbc0 --- /dev/null +++ b/SmallExplosion.gd @@ -0,0 +1,10 @@ +extends CPUParticles2D + +signal explosion_done + +func _ready() -> void: + one_shot = true + +func _on_Timer_timeout() -> void: + emit_signal("explosion_done") + queue_free() diff --git a/SmallExplosion.tscn b/SmallExplosion.tscn new file mode 100644 index 0000000..4c66bfd --- /dev/null +++ b/SmallExplosion.tscn @@ -0,0 +1,38 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://kenney_simple-space/PNG/Default/star_small.png" type="Texture" id=1] +[ext_resource path="res://SmallExplosion.gd" type="Script" id=2] + +[sub_resource type="Curve" id=1] +_data = [ Vector2( 0, 1 ), 0.0, 0.0, 0, 0, Vector2( 1, 0 ), 0.0, 0.0, 0, 0 ] + +[sub_resource type="Gradient" id=4] +offsets = PoolRealArray( 0, 0.941935, 1 ) +colors = PoolColorArray( 1, 1, 1, 1, 1, 0.0580645, 0.0580645, 1, 1, 0, 0, 1 ) + +[node name="SmallExplosion" type="CPUParticles2D"] +amount = 25 +lifetime = 0.5 +explosiveness = 1.0 +texture = ExtResource( 1 ) +emission_shape = 1 +emission_sphere_radius = 0.01 +spread = 180.0 +gravity = Vector2( 0, 0 ) +initial_velocity = 200.0 +initial_velocity_random = 0.52 +damping = 1000.0 +angle = 306.5 +angle_random = 0.4 +scale_amount = 0.5 +scale_amount_random = 1.0 +scale_amount_curve = SubResource( 1 ) +color_ramp = SubResource( 4 ) +script = ExtResource( 2 ) + +[node name="Timer" type="Timer" parent="."] +wait_time = 0.5 +one_shot = true +autostart = true + +[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] diff --git a/World.tscn b/World.tscn index d5e6f6e..a771bfe 100644 --- a/World.tscn +++ b/World.tscn @@ -8,9 +8,10 @@ [node name="Environment" type="Node2D" parent="."] [node name="Player" parent="." groups=["player"] instance=ExtResource( 2 )] +position = Vector2( 513, 302 ) [node name="Enemy" parent="." instance=ExtResource( 1 )] -position = Vector2( 295, 109 ) +position = Vector2( 876, 491 ) [node name="Enemy2" parent="." instance=ExtResource( 1 )] -position = Vector2( 218, -94 ) +position = Vector2( 149, 475 )