fuzzyworld

godot-shooter / commit

Added power ups for each weapon type.

8b763d1564eb17e06f73295072e6f3be9af61e40 · Pavel Safronov · 2023-11-10 16:12:54 -0800 · parents 641b63b5c341

Added power ups for each weapon type.
 PowerUp.gd |  3 ++-
 World.gd   | 43 ++++++++++++++++++++++++++-----------------
 2 files changed, 28 insertions(+), 18 deletions(-)

diff --git a/PowerUp.gd b/PowerUp.gd
index 93e98f1..10cb2b7 100644
--- a/PowerUp.gd
+++ b/PowerUp.gd
@@ -3,6 +3,7 @@ class_name PowerUp
 
 export var label = "+SP"
 export var color = Color.gold
+var data: Object
 signal consumed
 const Utils = preload("res://Utils.gd")
 
@@ -16,4 +17,4 @@ func _on_Area2D_body_entered(body: Node) -> void:
 	var player = players[0]
 	if body == player:
 		$AnimationPlayer.play("fade_out")
-		emit_signal("consumed")
+		emit_signal("consumed", data)
diff --git a/World.gd b/World.gd
index 1b29624..2c207a9 100644
--- a/World.gd
+++ b/World.gd
@@ -26,24 +26,22 @@ var is_dragging = false
 func enemy_killed(_position: Vector2):
 	$UI/HUD.score += 1
 	$UI/HUD.show_message("Enemy killed!", 1)
-func health_consumed():
+func health_consumed(_data):
 	$Player.heal(10)
-func shield_consumed():
+func shield_consumed(_data):
 	Utils.log("consuming a shield and sending a message")
 	$Player.enable_shield()
-func gold_consumed():
+func gold_consumed(_data):
 	completed_objectives += 1
 	$UI/HUD.score += 5
-func weapon_consumed():
-	var is_current_weapon_base = $Player.weapon.ammo	== INF
-	if is_current_weapon_base:
-		if randi() % 2 == 0:
-			$Player.weapon = Weapons.create_gattling_gun()
-		else:
-			$Player.weapon = Weapons.create_rocket_gun()
-	else:
+func weapon_consumed(data):
+	var weapon: Weapon = data
+	var is_same_weapon = $Player.weapon.name == weapon.name
+	if is_same_weapon && weapon.ammo != INF:
 		$Player.weapon.ammo += $Player.weapon.reload_size
-	
+	else:
+		$Player.weapon = weapon
+
 func create_enemy() -> Enemy:
 	var enemy = Enemy.instance()
 	enemy.position = get_new_environment_position()
@@ -64,11 +62,22 @@ func create_gold(pos: Vector2 = get_new_environment_position(1 + randf())) -> Po
 	gold.color = Color.gold
 	return gold
 func create_weapon() -> PowerUp:
-	var weapon = PowerUp.instance()
+	var weapon: PowerUp = PowerUp.instance()
 	weapon.position = get_new_environment_position(randf() + .5)
-	weapon.connect("consumed", self, "weapon_consumed")
-	weapon.label = "WPN"
-	weapon.color = Color.red
+	var _err = weapon.connect("consumed", self, "weapon_consumed")
+	var r = randf()
+	if r < .4:
+		weapon.data = Weapons.create_rocket_gun()
+		weapon.label = "ROC"
+		weapon.color = Color.red
+	elif r < .8:
+		weapon.data = Weapons.create_gattling_gun()
+		weapon.label = "SMG"
+		weapon.color = Color.orange
+	else:
+		weapon.data = Weapons.create_basic_gun()
+		weapon.label = "LZR"
+		weapon.color = Color.pink
 	return weapon
 func create_shield() -> PowerUp:
 	var shield = PowerUp.instance()
@@ -224,5 +233,5 @@ func restart() -> void:
 	var _err = get_tree().reload_current_scene()
 
 func _on_HUD_debug_signal() -> void:
-	completed_objectives = 5
+#	completed_objectives = 5
 	pass # Replace with function body.