fuzzyworld

godot-shooter / commit

Added bombs.

93d86765201b46d5cbce1661383421ea4499e0cb · Pavel Safronov · 2023-11-17 15:15:34 -0800 · parents 6b8f57b9ef78

Added bombs.
 items/PowerUp.gd  |  2 +-
 scenes/World.gd   | 22 +++++++++++--
 weapons/Bomb.gd   | 17 ++++++++++
 weapons/Bomb.tscn | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 133 insertions(+), 3 deletions(-)

diff --git a/items/PowerUp.gd b/items/PowerUp.gd
index ccd2ce3..3d23ef8 100644
--- a/items/PowerUp.gd
+++ b/items/PowerUp.gd
@@ -3,7 +3,7 @@ class_name PowerUp
 
 export var label = "+SP"
 export var color = Color.gold
-var data: Object
+var data
 signal consumed
 const Utils = preload("res://utils/Utils.gd")
 
diff --git a/scenes/World.gd b/scenes/World.gd
index ad37218..87c3086 100644
--- a/scenes/World.gd
+++ b/scenes/World.gd
@@ -1,8 +1,10 @@
 extends Node2D
 
+const Enemy = preload("res://actors/Enemy.tscn")
+const Bomb = preload("res://weapons/Bomb.tscn")
+
 const Utils = preload("res://utils/Utils.gd")
 const Weapons = preload("res://weapons/Weapons.gd")
-const Enemy = preload("res://actors/Enemy.tscn")
 const PowerUp = preload("res://items/PowerUp.tscn")
 const Settings = preload("res://utils/Settings.gd")
 onready var player: Player = $Player
@@ -11,6 +13,7 @@ var generators = [
 	ConstantItemGenerator.new("create_enemy", self, "enemies", 4),
 	ConstantItemGenerator.new("create_health", self, "health", 10),
 	ConstantItemGenerator.new("create_weapon", self, "weapon", 10),
+	ConstantItemGenerator.new("create_bomb", self, "bombs", 10),
 	LevelItemGenerator.new(5, "create_gold", self, "gold", 5),
 ]
 var completed_objectives = 0
@@ -34,6 +37,12 @@ func weapon_consumed(data):
 		player.weapon.ammo += player.weapon.reload_size
 	else:
 		player.weapon = weapon
+func bomb_consumed(data):
+	Utils.log("consumed a bomb")
+	var pos: Vector2 = data
+	var bomb = Bomb.instance()
+	$Environment.add_child(bomb)
+	bomb.position = pos
 
 func create_enemy() -> Enemy:
 	var enemy = Enemy.instance()
@@ -47,6 +56,15 @@ func create_health() -> PowerUp:
 	health.label = "+HP"
 	health.color = Color.green
 	return health
+func create_bomb() -> PowerUp:
+	var bomb = PowerUp.instance()
+	var pos = get_new_environment_position(randf() + .5)
+	bomb.position = pos
+	bomb.connect("consumed", self, "bomb_consumed")
+	bomb.label = "BOMB"
+	bomb.color = Color.purple
+	bomb.data = pos
+	return bomb
 func create_gold(pos: Vector2 = get_new_environment_position(1 + randf())) -> PowerUp:
 	var gold = PowerUp.instance()
 	gold.position = pos
@@ -82,7 +100,6 @@ func get_new_item_pos(dist_ratio: float = 1.0) -> Vector2:
 	var enemy_spawn_dist = screen_radius * dist_ratio
 	var pos = unit_vector * enemy_spawn_dist + $Player.global_position
 	return pos
-
 func get_new_environment_position(dist_ratio: float = 1.0) -> Vector2:
 	var potential_pos: Vector2
 	while true:
@@ -144,6 +161,7 @@ func _process(_delta: float) -> void:
 	if player.settings.show_items:
 		player.update_radar(get_tree().get_nodes_in_group("health"), Color.gray)
 		player.update_radar(get_tree().get_nodes_in_group("weapons"), Color.white)
+		player.update_radar(get_tree().get_nodes_in_group("bombs"), Color.purple)
 
 	player.update_radar(get_tree().get_nodes_in_group("gold"), Color.gold)
 	player.update_radar(filteredEnemies, Color.red)
diff --git a/weapons/Bomb.gd b/weapons/Bomb.gd
new file mode 100644
index 0000000..1ab59b7
--- /dev/null
+++ b/weapons/Bomb.gd
@@ -0,0 +1,17 @@
+extends Node2D
+
+var hurt_enemies = []
+export var damage_amount = 50
+
+func _ready() -> void:
+	$AnimationPlayer.play("explode")
+	pass # Replace with function body.
+
+func _on_Area2D_body_entered(body: Node) -> void:
+#	var player = get_tree().get_nodes_in_group("player")[0]
+#	if body != player:
+#		var enemy: Enemy = body
+	if body is Enemy:
+		var already_hurt_enemy = hurt_enemies.has(body)
+		hurt_enemies.push_back(body)
+		body.hurt(damage_amount)
diff --git a/weapons/Bomb.tscn b/weapons/Bomb.tscn
new file mode 100644
index 0000000..d442183
--- /dev/null
+++ b/weapons/Bomb.tscn
@@ -0,0 +1,95 @@
+[gd_scene load_steps=6 format=2]
+
+[ext_resource path="res://weapons/Bomb.gd" type="Script" id=1]
+[ext_resource path="res://assets/kenney_crosshair-pack/PNG/White Retina/crosshair117.png" type="Texture" id=2]
+
+[sub_resource type="CircleShape2D" id=1]
+radius = 49.0102
+
+[sub_resource type="Animation" id=2]
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:scale")
+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": [ Vector2( 1, 1 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath(".:modulate")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0 ),
+"transitions": PoolRealArray( 1 ),
+"update": 0,
+"values": [ Color( 1, 1, 1, 1 ) ]
+}
+
+[sub_resource type="Animation" id=3]
+resource_name = "explode"
+length = 3.0
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:scale")
+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": [ Vector2( 1, 1 ), Vector2( 3, 3 ) ]
+}
+tracks/1/type = "value"
+tracks/1/path = NodePath(".:modulate")
+tracks/1/interp = 1
+tracks/1/loop_wrap = true
+tracks/1/imported = false
+tracks/1/enabled = true
+tracks/1/keys = {
+"times": PoolRealArray( 0, 3 ),
+"transitions": PoolRealArray( 1, 1 ),
+"update": 0,
+"values": [ Color( 1, 0, 0, 1 ), Color( 1, 0, 0, 0 ) ]
+}
+tracks/2/type = "method"
+tracks/2/path = NodePath(".")
+tracks/2/interp = 1
+tracks/2/loop_wrap = true
+tracks/2/imported = false
+tracks/2/enabled = true
+tracks/2/keys = {
+"times": PoolRealArray( 3 ),
+"transitions": PoolRealArray( 1 ),
+"values": [ {
+"args": [  ],
+"method": "queue_free"
+} ]
+}
+
+[node name="Bomb" type="Node2D"]
+script = ExtResource( 1 )
+
+[node name="Area2D" type="Area2D" parent="."]
+
+[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
+shape = SubResource( 1 )
+
+[node name="Sprite" type="Sprite" parent="."]
+texture = ExtResource( 2 )
+
+[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
+anims/RESET = SubResource( 2 )
+anims/explode = SubResource( 3 )
+
+[node name="Particles2D" type="Particles2D" parent="."]
+
+[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"]