From b91f86de604cbc2e15288caa1f98f7c4a1fe64f3 Mon Sep 17 00:00:00 2001 From: h0lybyte <5599058+h0lybyte@users.noreply.github.com> Date: Wed, 19 Feb 2025 21:08:59 -0500 Subject: [PATCH] feat(brackeys13): added a limit of 25 laser shots , going to make it an upgrade. --- apps/gamejam/brackeys/13/scenes/game.tscn | 4 ++- apps/gamejam/brackeys/13/scenes/laser.tscn | 2 ++ apps/gamejam/brackeys/13/scripts/game.gd | 9 ++++-- apps/gamejam/brackeys/13/scripts/global.gd | 20 ++++++++++-- apps/gamejam/brackeys/13/scripts/laser.gd | 6 +++- .../brackeys/13/scripts/projectiles.gd | 31 +++++++++++++++++++ apps/gamejam/brackeys/13/scripts/spaceship.gd | 5 +-- 7 files changed, 66 insertions(+), 11 deletions(-) create mode 100644 apps/gamejam/brackeys/13/scripts/projectiles.gd diff --git a/apps/gamejam/brackeys/13/scenes/game.tscn b/apps/gamejam/brackeys/13/scenes/game.tscn index 9be2da029..2ce188f50 100644 --- a/apps/gamejam/brackeys/13/scenes/game.tscn +++ b/apps/gamejam/brackeys/13/scenes/game.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=3 format=3 uid="uid://cbrda40vq26pj"] +[gd_scene load_steps=4 format=3 uid="uid://cbrda40vq26pj"] [ext_resource type="Script" path="res://scripts/game.gd" id="1_oyaqx"] [ext_resource type="PackedScene" uid="uid://1s5v0llrjq3" path="res://scenes/spaceship.tscn" id="1_rlyye"] +[ext_resource type="Script" path="res://scripts/projectiles.gd" id="3_hgajf"] [node name="Game" type="Node2D"] script = ExtResource("1_oyaqx") @@ -10,3 +11,4 @@ script = ExtResource("1_oyaqx") position = Vector2(500, 300) [node name="Projectiles" type="Node" parent="."] +script = ExtResource("3_hgajf") diff --git a/apps/gamejam/brackeys/13/scenes/laser.tscn b/apps/gamejam/brackeys/13/scenes/laser.tscn index 4d7c179b3..6ab7534d9 100644 --- a/apps/gamejam/brackeys/13/scenes/laser.tscn +++ b/apps/gamejam/brackeys/13/scenes/laser.tscn @@ -24,3 +24,5 @@ shape = SubResource("CapsuleShape2D_44da2") [node name="VisibleOnScreenNotifier2D" type="VisibleOnScreenNotifier2D" parent="."] position = Vector2(0, -14.5) scale = Vector2(0.5, 1.35) + +[connection signal="screen_exited" from="VisibleOnScreenNotifier2D" to="." method="_on_visible_on_screen_notifier_2d_screen_exited"] diff --git a/apps/gamejam/brackeys/13/scripts/game.gd b/apps/gamejam/brackeys/13/scripts/game.gd index 743de9ca5..35fb10f38 100644 --- a/apps/gamejam/brackeys/13/scripts/game.gd +++ b/apps/gamejam/brackeys/13/scripts/game.gd @@ -3,8 +3,11 @@ extends Node2D @onready var spaceship = $Spaceship @onready var projectiles = $Projectiles +const LASER_POOL_SIZE = 25 + func _ready(): spaceship.connect("laser_shot", _on_spaceship_laser_shot) - -func _on_spaceship_laser_shot(laser): - projectiles.add_child(laser) + projectiles.initialize_pool(LASER_POOL_SIZE) + +func _on_spaceship_laser_shot(scope_position: Vector2, rotation: float): + projectiles.shoot_laser(scope_position, rotation) diff --git a/apps/gamejam/brackeys/13/scripts/global.gd b/apps/gamejam/brackeys/13/scripts/global.gd index bacc34464..e3bef0387 100644 --- a/apps/gamejam/brackeys/13/scripts/global.gd +++ b/apps/gamejam/brackeys/13/scripts/global.gd @@ -4,6 +4,7 @@ extends Node signal resource_changed(resource_name, new_value) signal resource_receipt(resource_name, amount, new_value, invoice) signal starship_stat_changed(stat_name, new_value) +signal starship_data_changed(data_name, new_value) var resources := { "gold": 0, @@ -17,7 +18,8 @@ var base_starship_stats := { "max_speed": 400.0, "rotation_speed": 270.0, "laser_speed": 550.0, - "overheat": 0.0 + "overheat": 0.0, + "laser_ammo": 20.0, } var starship_bonuses := { @@ -25,7 +27,14 @@ var starship_bonuses := { "max_speed": 0.0, "rotation_speed": 0.0, "laser_speed": 0.0, - "overheat": 0.0 + "overheat": 0.0, + "laser_ammo": 0.0 +} + +var starship_data := { + "name": "Explorer-X", + "emergency_rockets_used": false, + "shield_active": false } func earn_resource(resource_name: String, amount: int, invoice: String = "Earned"): @@ -80,3 +89,10 @@ func set_base_starship_stat(stat_name: String, new_value: float): return base_starship_stats[stat_name] = new_value emit_signal("starship_stat_changed", stat_name, get_starship_stat(stat_name)) + +func get_starship_data(data_name: String): + return starship_data.get(data_name, null) + +func set_starship_data(data_name: String, new_value): + starship_data[data_name] = new_value + emit_signal("starship_data_changed", data_name, new_value) diff --git a/apps/gamejam/brackeys/13/scripts/laser.gd b/apps/gamejam/brackeys/13/scripts/laser.gd index 0c958846e..2f84b4689 100644 --- a/apps/gamejam/brackeys/13/scripts/laser.gd +++ b/apps/gamejam/brackeys/13/scripts/laser.gd @@ -1,5 +1,6 @@ extends Area2D + var movement_vector := Vector2(0, -1) func _physics_process(delta): @@ -7,4 +8,7 @@ func _physics_process(delta): global_position += movement_vector.rotated(rotation) * laser_speed * delta func _on_visible_on_screen_notifier_2d_screen_exited(): - queue_free() + visible = false + if get_parent(): + get_parent()._on_laser_exited(self) + #queue_free() diff --git a/apps/gamejam/brackeys/13/scripts/projectiles.gd b/apps/gamejam/brackeys/13/scripts/projectiles.gd new file mode 100644 index 000000000..c7c28cce1 --- /dev/null +++ b/apps/gamejam/brackeys/13/scripts/projectiles.gd @@ -0,0 +1,31 @@ +extends Node + +const LASER_SCENE = preload("res://scenes/laser.tscn") + +# Shift these to the Q crate later on. +var laser_pool: Array = [] +var active_lasers: Array = [] + +func initialize_pool(size: int): + for i in range(size): + var laser = LASER_SCENE.instantiate() + laser.connect("tree_exited", _on_laser_exited.bind(laser)) + laser.set_deferred("visible", false) + laser_pool.append(laser) + add_child(laser) + +func shoot_laser(global_position: Vector2, rotation: float): + if laser_pool.size() > 0: + var laser = laser_pool.pop_back() + laser.global_position = global_position + laser.rotation = rotation + laser.set_deferred("visible", true) + active_lasers.append(laser) + else: + print("Out of laser energy shots") + +func _on_laser_exited(laser): + if laser in active_lasers: + active_lasers.erase(laser) + laser.set_deferred("visible", false) + laser_pool.append(laser) diff --git a/apps/gamejam/brackeys/13/scripts/spaceship.gd b/apps/gamejam/brackeys/13/scripts/spaceship.gd index 96bff83c2..d5d7a64db 100644 --- a/apps/gamejam/brackeys/13/scripts/spaceship.gd +++ b/apps/gamejam/brackeys/13/scripts/spaceship.gd @@ -52,7 +52,4 @@ func _physics_process(delta): global_position.x = 0 func shoot_laser(): - var laser = laser_scene.instantiate(); - laser.global_position = scope.global_position - laser.rotation = rotation - emit_signal("laser_shot", laser) + emit_signal("laser_shot", scope.global_position, rotation)