godot-shooter / commit
Standardize how power-ups (items that can be picked up by player) are done. Keep just one class that implements it, and allow customization through this control.
Enemy.gd | 4 +- Enemy.tscn | 6 +-- HUD.tscn | 2 - HealPowerUp.gd | 13 ----- HealPowerUp.tscn | 109 -------------------------------------- Player.tscn | 2 +- PowerUp.gd | 18 +++++++ SpeedPowerUp.tscn => PowerUp.tscn | 12 ++--- SpeedPowerUp.gd | 13 ----- World.gd | 33 +++++++++--- World.tscn | 2 +- 11 files changed, 56 insertions(+), 158 deletions(-) diff --git a/Enemy.gd b/Enemy.gd index 0ab9ecc..c155da3 100644 --- a/Enemy.gd +++ b/Enemy.gd @@ -13,7 +13,7 @@ export var health = -1 export var max_health = 10 export var is_targeted = false export var is_invincible = false -signal enemy_killed +signal enemy_killed(position) var velocity = Vector2.ZERO var dead = false @@ -82,7 +82,7 @@ func kill(): explosion.connect("explosion_done", self, "_on_death_explosion_finished") $Graphics.add_child(explosion) z_index = -1 - emit_signal("enemy_killed") + emit_signal("enemy_killed", global_position) func _on_death_explosion_finished(): $AnimationPlayer.play("fade_out") diff --git a/Enemy.tscn b/Enemy.tscn index d9770a2..e68c8db 100644 --- a/Enemy.tscn +++ b/Enemy.tscn @@ -95,10 +95,10 @@ texture = ExtResource( 1 ) [node name="Container" type="Node2D" parent="Graphics/Alive"] [node name="HealthLabel" type="Label" parent="Graphics/Alive/Container"] -margin_left = -25.0 +margin_left = -48.0 margin_top = 37.0 -margin_right = 25.0 -margin_bottom = 51.0 +margin_right = 49.0 +margin_bottom = 72.0 theme = ExtResource( 4 ) text = "HEALTH" diff --git a/HUD.tscn b/HUD.tscn index adf5367..419374c 100644 --- a/HUD.tscn +++ b/HUD.tscn @@ -46,8 +46,6 @@ margin_right = 40.0 margin_bottom = 40.0 [node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_left = 20.0 -margin_top = 20.0 margin_right = 278.0 margin_bottom = 74.0 diff --git a/HealPowerUp.gd b/HealPowerUp.gd deleted file mode 100644 index e4601d3..0000000 --- a/HealPowerUp.gd +++ /dev/null @@ -1,13 +0,0 @@ -extends Node2D - -export var heal_amount = 1 -signal consumed - -func _ready() -> void: - $AnimationPlayer.play("fade_in") - -func _on_Area2D_body_entered(body: Node) -> void: - if body.has_method("heal"): - body.heal(heal_amount) - $AnimationPlayer.play("fade_out") - emit_signal("consumed") diff --git a/HealPowerUp.tscn b/HealPowerUp.tscn deleted file mode 100644 index 64c39c9..0000000 --- a/HealPowerUp.tscn +++ /dev/null @@ -1,109 +0,0 @@ -[gd_scene load_steps=8 format=2] - -[ext_resource path="res://HealPowerUp.gd" type="Script" id=1] -[ext_resource path="res://assets/kenney_simple-space/PNG/Retina/star_tiny.png" type="Texture" id=2] -[ext_resource path="res://CharacterTheme.tres" type="Theme" id=3] - -[sub_resource type="RectangleShape2D" id=4] -extents = Vector2( 27, 32.5 ) - -[sub_resource type="Animation" id=1] -length = 0.001 -tracks/0/type = "value" -tracks/0/path = NodePath(".:modulate") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0 ), -"transitions": PoolRealArray( 1 ), -"update": 0, -"values": [ Color( 1, 1, 1, 1 ) ] -} - -[sub_resource type="Animation" id=3] -resource_name = "fade_in" -length = 3.0 -tracks/0/type = "value" -tracks/0/path = NodePath(".:modulate") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0, 3 ), -"transitions": PoolRealArray( 1, 1 ), -"update": 0, -"values": [ Color( 1, 1, 1, 0 ), Color( 1, 1, 1, 1 ) ] -} -tracks/1/type = "value" -tracks/1/path = NodePath(".:scale") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( -0.2, 3 ), -"transitions": PoolRealArray( 1, 1 ), -"update": 0, -"values": [ Vector2( 0.01, 0.01 ), Vector2( 1, 1 ) ] -} - -[sub_resource type="Animation" id=2] -resource_name = "fade_out" -tracks/0/type = "value" -tracks/0/path = NodePath(".:modulate") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/keys = { -"times": PoolRealArray( 0, 1 ), -"transitions": PoolRealArray( 1, 1 ), -"update": 0, -"values": [ Color( 1, 1, 1, 1 ), Color( 1, 1, 1, 0 ) ] -} -tracks/1/type = "method" -tracks/1/path = NodePath(".") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/keys = { -"times": PoolRealArray( 1.3 ), -"transitions": PoolRealArray( 1 ), -"values": [ { -"args": [ ], -"method": "queue_free" -} ] -} - -[node name="HealPowerUp" type="Node2D"] -script = ExtResource( 1 ) - -[node name="Area2D" type="Area2D" parent="."] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] -position = Vector2( 0, 14.5 ) -shape = SubResource( 4 ) - -[node name="Sprite" type="Sprite" parent="Area2D"] -modulate = Color( 0, 1, 0.0156863, 1 ) -texture = ExtResource( 2 ) - -[node name="Label" type="Label" parent="Area2D"] -margin_left = -26.0 -margin_top = 17.0 -margin_right = 27.0 -margin_bottom = 52.0 -theme = ExtResource( 3 ) -text = "+HP" -align = 1 - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -anims/RESET = SubResource( 1 ) -anims/fade_in = SubResource( 3 ) -anims/fade_out = SubResource( 2 ) - -[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"] diff --git a/Player.tscn b/Player.tscn index 07c50e0..801bcd1 100644 --- a/Player.tscn +++ b/Player.tscn @@ -10,7 +10,7 @@ [sub_resource type="Gradient" id=1] colors = PoolColorArray( 0, 0, 0, 0, 0, 1, 0, 1 ) -[node name="Player" type="KinematicBody2D"] +[node name="Player" type="KinematicBody2D" groups=["player"]] rotation = -0.000165944 script = ExtResource( 3 ) bullet = ExtResource( 4 ) diff --git a/PowerUp.gd b/PowerUp.gd new file mode 100644 index 0000000..64628f5 --- /dev/null +++ b/PowerUp.gd @@ -0,0 +1,18 @@ +extends Node2D + +export var label = "+SP" +export var color = Color.gold +signal consumed +const Utils = preload("res://Utils.gd") + +func _ready() -> void: + $AnimationPlayer.play("fade_in") + $Area2D/Label.text = label + $Area2D/Sprite.modulate = color + +func _on_Area2D_body_entered(body: Node) -> void: + var players = get_tree().get_nodes_in_group("player") + var player = players[0] + if body == player: + $AnimationPlayer.play("fade_out") + emit_signal("consumed") diff --git a/SpeedPowerUp.tscn b/PowerUp.tscn similarity index 90% rename from SpeedPowerUp.tscn rename to PowerUp.tscn index 6c461dd..6286a67 100644 --- a/SpeedPowerUp.tscn +++ b/PowerUp.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=8 format=2] -[ext_resource path="res://SpeedPowerUp.gd" type="Script" id=1] +[ext_resource path="res://CharacterTheme.tres" type="Theme" id=1] [ext_resource path="res://assets/kenney_simple-space/PNG/Retina/star_tiny.png" type="Texture" id=2] -[ext_resource path="res://CharacterTheme.tres" type="Theme" id=3] +[ext_resource path="res://PowerUp.gd" type="Script" id=3] [sub_resource type="RectangleShape2D" id=4] extents = Vector2( 26, 32 ) @@ -79,14 +79,12 @@ tracks/1/keys = { } ] } -[node name="SpeedPowerUp" type="Node2D"] -script = ExtResource( 1 ) -speed_amount = 20 +[node name="PowerUp" type="Node2D"] +script = ExtResource( 3 ) [node name="Area2D" type="Area2D" parent="."] [node name="Sprite" type="Sprite" parent="Area2D"] -modulate = Color( 0, 0.462745, 1, 1 ) texture = ExtResource( 2 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] @@ -98,7 +96,7 @@ margin_left = -25.0 margin_top = 19.0 margin_right = 26.0 margin_bottom = 54.0 -theme = ExtResource( 3 ) +theme = ExtResource( 1 ) text = "+SP" align = 1 valign = 1 diff --git a/SpeedPowerUp.gd b/SpeedPowerUp.gd deleted file mode 100644 index 4c379f5..0000000 --- a/SpeedPowerUp.gd +++ /dev/null @@ -1,13 +0,0 @@ -extends Node2D - -export var speed_amount = 10 -signal consumed - -func _ready() -> void: - $AnimationPlayer.play("fade_in") - -func _on_Area2D_body_entered(body: Node) -> void: - if body.has_method("speed_up"): - body.speed_up() - $AnimationPlayer.play("fade_out") - emit_signal("consumed") diff --git a/World.gd b/World.gd index d042020..3e94a61 100644 --- a/World.gd +++ b/World.gd @@ -2,23 +2,29 @@ extends Node2D const Utils = preload("res://Utils.gd") const Enemy = preload("res://Enemy.tscn") -const Health = preload("res://HealPowerUp.tscn") -const Speed = preload("res://SpeedPowerUp.tscn") +const PowerUp = preload("res://PowerUp.tscn") var destination: Vector2 var is_destination_set = false var min_items_dict = { "create_enemy": 10, - "create_health": 2, - "create_speed": 2, + "create_health": 5, +# "create_speed": 2, + "create_gold": 5, } -func enemy_killed(): +func enemy_killed(position: Vector2): $UI/HUD.score += 1 $UI/HUD.show_message("Enemy killed!", .5) + create_gold(position) func health_consumed(): + $Player.heal() $UI/HUD.show_message("+1 health", 1) func speed_consumed(): + $Player.speed_up() $UI/HUD.show_message("+10 speed", 1) +func gold_consumed(): + $UI/HUD.score += 5 + $UI/HUD.show_message("+5 points", 1) func create_enemy(): var enemy = Enemy.instance() @@ -29,17 +35,30 @@ func create_enemy(): $Environment.call_deferred("add_child", enemy) func create_health(): - var health = Health.instance() + var health = PowerUp.instance() health.position = get_new_item_pos(1 + randf()) health.connect("tree_exiting", self, "create_health") health.connect("consumed", self, "health_consumed") + health.label = "+HP" + health.color = Color.green $Environment.call_deferred("add_child", health) func create_speed(): - var speed = Speed.instance() + var speed = PowerUp.instance() speed.position = get_new_item_pos(1 + randf()) speed.connect("tree_exiting", self, "create_speed") speed.connect("consumed", self, "speed_consumed") + speed.label = "+SP" + speed.color = Color.blue + $Environment.call_deferred("add_child", speed) + +func create_gold(pos: Vector2 = get_new_item_pos(1 + randf())): + var speed = PowerUp.instance() + speed.position = pos + speed.connect("tree_exiting", self, "create_gold") + speed.connect("consumed", self, "gold_consumed") + speed.label = "+5" + speed.color = Color.gold $Environment.call_deferred("add_child", speed) func _ready() -> void: diff --git a/World.tscn b/World.tscn index 5374975..698b737 100644 --- a/World.tscn +++ b/World.tscn @@ -45,7 +45,7 @@ __meta__ = { [node name="StarField2" parent="Background/ParallaxBackground/Background" instance=ExtResource( 5 )] visible = false -[node name="Player" parent="." groups=["player"] instance=ExtResource( 2 )] +[node name="Player" parent="." instance=ExtResource( 2 )] position = Vector2( 248, 410 ) [node name="Environment" type="Node2D" parent="."]