godot-shooter / commit
Weapon pick-ups are now 10 rockets, which start to fire automatically, then revert back to laser (default weapon) when the rockets run out.
HUD.gd | 11 +++++++---- HUD.tscn | 35 ++++++++++++++++++++++++++--------- Player.gd | 5 +++++ Weapon.gd | 2 ++ Weapons.gd | 3 +++ World.gd | 13 +++++++++---- 6 files changed, 52 insertions(+), 17 deletions(-) diff --git a/HUD.gd b/HUD.gd index 8cb26eb..c259042 100644 --- a/HUD.gd +++ b/HUD.gd @@ -8,8 +8,10 @@ signal debug_signal onready var label = $CanvasLayer/MessageLabel onready var animation_player = $AnimationPlayer -onready var score_label = $HBoxContainer/Score +onready var score_label = $MarginContainer2/HBoxContainer/Score onready var objective_label = $MarginContainer/HBoxContainer2/Objective +onready var weapon_label = $MarginContainer2/HBoxContainer/Weapon +onready var ammo_label = $MarginContainer2/HBoxContainer/Ammo func _process(_delta: float) -> void: score_label.text = "%s" % score @@ -48,9 +50,10 @@ func show_message(message: String, duration_seconds: int = 2) -> void: else: animation_player.play(new_fade_in) animation_player.queue(new_fade_out) - -func set_label_text(new_text: String) -> void: - label.text = new_text func _on_PauseButton_pressed() -> void: emit_signal("paused") + +func set_current_weapon(weapon: Weapon) -> void: + weapon_label.text = "%s:" % weapon.name + ammo_label.text = "%s" % weapon.ammo diff --git a/HUD.tscn b/HUD.tscn index 5131a60..e06310b 100644 --- a/HUD.tscn +++ b/HUD.tscn @@ -56,24 +56,41 @@ margin_bottom = -10.0 theme = ExtResource( 1 ) script = ExtResource( 2 ) -[node name="HBoxContainer" type="HBoxContainer" parent="."] -margin_right = 282.0 -margin_bottom = 74.0 +[node name="MarginContainer2" type="MarginContainer" parent="."] +anchor_right = 1.0 + +[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer2"] +margin_right = 480.0 +margin_bottom = 37.0 -[node name="ScoreText" type="Label" parent="HBoxContainer"] -margin_top = 18.0 +[node name="ScoreText" type="Label" parent="MarginContainer2/HBoxContainer"] margin_right = 128.0 -margin_bottom = 55.0 +margin_bottom = 37.0 text = "Score: " -[node name="Score" type="Label" parent="HBoxContainer"] +[node name="Score" type="Label" parent="MarginContainer2/HBoxContainer"] margin_left = 136.0 -margin_top = 18.0 margin_right = 198.0 -margin_bottom = 55.0 +margin_bottom = 37.0 text = "100" uppercase = true +[node name="Weapon" type="Label" parent="MarginContainer2/HBoxContainer"] +margin_left = 312.0 +margin_right = 427.0 +margin_bottom = 37.0 +size_flags_horizontal = 10 +size_flags_vertical = 1 +text = "Laser:" +align = 2 +valign = 2 + +[node name="Ammo" type="Label" parent="MarginContainer2/HBoxContainer"] +margin_left = 435.0 +margin_right = 480.0 +margin_bottom = 37.0 +text = "inf" + [node name="MarginContainer" type="MarginContainer" parent="."] anchor_top = 1.0 anchor_right = 1.0 diff --git a/Player.gd b/Player.gd index b0b79b9..1dc5b4e 100644 --- a/Player.gd +++ b/Player.gd @@ -18,6 +18,7 @@ const Utils = preload("res://Utils.gd") const PopupControl = preload("res://Popup.tscn") var weapon: Weapon +var default_weapon: Weapon = Weapons.create_basic_gun() var dead = false var velocity: Vector2 var can_fire = true @@ -131,6 +132,10 @@ func shoot_at(pos: Vector2): if !can_fire: return can_fire = false + if weapon.ammo != INF: + weapon.ammo -= 1 + if weapon.ammo == 0: + weapon = default_weapon $ShotTimer.wait_time = weapon.particle_lifetime_secs $ShotTimer.start() var particle = weapon.particle.instance() diff --git a/Weapon.gd b/Weapon.gd index 2f92276..78680a0 100644 --- a/Weapon.gd +++ b/Weapon.gd @@ -5,3 +5,5 @@ var shooting_range = 400 var particle: PackedScene var particle_speed = 100 var particle_lifetime_secs = 5 +var ammo = INF +var name = "Laser" diff --git a/Weapons.gd b/Weapons.gd index 3aa94da..f56be74 100644 --- a/Weapons.gd +++ b/Weapons.gd @@ -8,6 +8,7 @@ static func create_basic_gun(period_secs: float = 1) -> Weapon: weapon.particle_lifetime_secs = period_secs weapon.particle_speed = 300 weapon.cooldown_seconds = 1 + weapon.ammo = INF return weapon static func create_rocket_gun(period_secs: float = 1) -> Weapon: @@ -17,4 +18,6 @@ static func create_rocket_gun(period_secs: float = 1) -> Weapon: weapon.particle_lifetime_secs = period_secs weapon.particle_speed = 100 weapon.cooldown_seconds = 1 + weapon.ammo = 10 + weapon.name = "Rocket" return weapon diff --git a/World.gd b/World.gd index 6a3cc3b..96a0561 100644 --- a/World.gd +++ b/World.gd @@ -13,10 +13,10 @@ var destination: Vector2 var is_destination_set = false var generators = [ ConstantItemGenerator.new("create_enemy", self, "enemies", 4), - LevelItemGenerator.new(10, "create_health", self, "health", 10), -# LevelItemGenerator.new(3, "create_shield", self, "shields", 3), + ConstantItemGenerator.new("create_health", self, "health", 10), + ConstantItemGenerator.new("create_weapon", self, "weapon", 10), LevelItemGenerator.new(5, "create_gold", self, "gold", 5), - LevelItemGenerator.new(5, "create_weapon", self, "weapon", 5), +# LevelItemGenerator.new(3, "create_shield", self, "shields", 3), ] var completed_objectives = 0 var max_objectives = 5 @@ -34,7 +34,11 @@ func gold_consumed(): completed_objectives += 1 $UI/HUD.score += 5 func weapon_consumed(): - $Player.weapon = Weapons.create_rocket_gun() + var is_current_weapon_base = $Player.weapon.ammo == INF + if is_current_weapon_base: + $Player.weapon = Weapons.create_rocket_gun() + else: + $Player.weapon.ammo += 10 func create_enemy() -> Enemy: var enemy = Enemy.instance() @@ -120,6 +124,7 @@ func _process(_delta: float) -> void: return $UI/HUD.objective = "%s / %s" % [completed_objectives, max_objectives] + $UI/HUD.set_current_weapon(player.weapon) var all_done = completed_objectives == max_objectives if all_done: get_tree().paused = true