godot-shooter / commit
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"]