fuzzyworld

godot-shooter / commit

Removed most messages for powerups, kept messages for killing enemies.

9dfa089398d5204a3ed90094af19db2408c50446 · Pavel Safronov · 2023-11-08 11:40:47 -0800 · parents adf9182373e3

Removed most messages for powerups, kept messages for killing enemies.
Removed the logic that removes items if they are too far away.
Shields are mostly working now, at least to enable and disable. Though disabling doesn't always happen when the player collides with an enemy.
 HUD.gd                | 11 +++++------
 LevelItemGenerator.gd |  1 -
 Player.gd             | 17 +++++++++++------
 Player.tscn           | 20 +++++++++++++++++++-
 PowerUp.tscn          |  9 +++++----
 Utils.gd              | 13 +++++++++++++
 World.gd              | 23 ++++++-----------------
 World.tscn            |  2 +-
 8 files changed, 60 insertions(+), 36 deletions(-)

diff --git a/HUD.gd b/HUD.gd
index 10275ab..a6cbdad 100644
--- a/HUD.gd
+++ b/HUD.gd
@@ -12,8 +12,6 @@ onready var score_label = $HBoxContainer/Score
 onready var level_label = $MarginContainer/HBoxContainer2/Level
 onready var objective_label = $MarginContainer/HBoxContainer2/Objective
 
-var message_count = 0
-
 func _process(_delta: float) -> void:
 	score_label.text = "%s" % score
 	level_label.text = "%s" % level
@@ -32,16 +30,17 @@ func restart():
 	get_tree().paused = false
 
 func show_message(message: String, duration_seconds: int = 2) -> void:
-	message_count += 1
-
+	var now_msecs = OS.get_system_time_msecs()
+#	var stack = Utils.get_stack_string()
+#	Utils.log("showing message:", message, "at:", now_msecs, "in stack:", stack)
 	var fade_in = animation_player.get_animation("message fade in")
 	fade_in.track_set_key_value(1, 0, message)
 	var fade_out = animation_player.get_animation("message fade out")
 	fade_out.track_set_key_time(0, 1, duration_seconds)
 
-	var new_fade_in = "fade in %s" % message_count
+	var new_fade_in = "fade in %s" % now_msecs
 	animation_player.add_animation(new_fade_in, fade_in)
-	var new_fade_out = "fade out %s" % message_count
+	var new_fade_out = "fade out %s" % now_msecs
 	animation_player.add_animation(new_fade_out, fade_out)
 	
 	if animation_player.is_playing():
diff --git a/LevelItemGenerator.gd b/LevelItemGenerator.gd
index d3be1c6..a38e7f7 100644
--- a/LevelItemGenerator.gd
+++ b/LevelItemGenerator.gd
@@ -29,6 +29,5 @@ func run(node: Node) -> bool:
 		var item: Node = funcref(instance_object, creator_name).call_func()
 		item.add_to_group(group_name)
 		node.add_child(item)
-		items = node.get_tree().get_nodes_in_group(group_name)
 		generated_count += 1
 	return false
diff --git a/Player.gd b/Player.gd
index f30202b..9e3eba5 100644
--- a/Player.gd
+++ b/Player.gd
@@ -11,7 +11,6 @@ export var turn_rate = 0.03
 export var shooting_range = 500
 export var shield_active = true
 export var shield_restart_period_seconds = 5
-signal shield_changed
 
 var PopupControl = preload("res://Popup.tscn")
 
@@ -21,6 +20,12 @@ var can_fire = true
 var destination: Vector2
 var is_destination_set = false
 
+func _ready() -> void:
+	if shield_active:
+		enable_shield()
+	else:
+		$Graphics/Alive/Shield/Sprite/AnimationPlayer.play("fade out instant")
+
 func _process(_delta: float) -> void:
 	if dead:
 		return
@@ -64,16 +69,16 @@ func speed_up(delta: int = 10):
 func enable_shield() -> void:
 	shield_active = true
 	$Graphics/Alive/Shield/Sprite/AnimationPlayer.play("fade in")
-	emit_signal("shield_changed", shield_active)
+
+func disable_shield() -> void:
+	shield_active = false
+	$Graphics/Alive/Shield/Sprite/AnimationPlayer.play("fade out")
 
 func hurt(damage_amount: int = 1):
 	if dead or is_invincible:
 		return
 	if shield_active:
-		shield_active = false
-		$Graphics/Alive/Shield/Sprite/AnimationPlayer.play("fade out")
-		emit_signal("shield_changed", shield_active)
-		
+		disable_shield()
 		var timer = Timer.new()
 		timer.wait_time = shield_restart_period_seconds
 		timer.one_shot = true
diff --git a/Player.tscn b/Player.tscn
index e1ca400..9fff587 100644
--- a/Player.tscn
+++ b/Player.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=15 format=2]
+[gd_scene load_steps=16 format=2]
 
 [ext_resource path="res://assets/kenney_simple-space/PNG/Default/ship_sidesA.png" type="Texture" id=1]
 [ext_resource path="res://Explosion.tscn" type="PackedScene" id=2]
@@ -140,10 +140,27 @@ tracks/0/keys = {
 "values": [ Color( 0, 0, 1, 1 ), Color( 0, 0, 1, 0 ) ]
 }
 
+[sub_resource type="Animation" id=8]
+resource_name = "fade out instant"
+length = 0.001
+tracks/0/type = "value"
+tracks/0/path = NodePath(".:modulate")
+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": [ Color( 0, 0, 1, 0 ) ]
+}
+
 [node name="Player" type="KinematicBody2D" groups=["player"]]
 rotation = -0.000165944
 script = ExtResource( 3 )
 bullet = ExtResource( 4 )
+shield_active = false
 
 [node name="ShipCollisionShape" type="CollisionPolygon2D" parent="."]
 polygon = PoolVector2Array( -0.996349, -22.0002, -8.00133, 7.99867, -7.00166, 9.99884, -11.002, 11.9982, -14.0007, 3.99768, -20.002, 11.9967, -17.0038, 22.9972, -9.00465, 27.9985, -8.00448, 26.9987, -10.0027, 15.9983, -6.00232, 13.999, -0.00398266, 24, 4.99784, 13.0008, 9.99734, 16.0017, 6.99552, 27.0012, 7.99519, 29.0013, 10.9952, 29.0018, 17.996, 24.003, 20.998, 12.0035, 15.9993, 4.00266, 12.9993, 4.00216, 10.9982, 11.0018, 6.99834, 10.0012, 0.00381671, -23 )
@@ -193,6 +210,7 @@ anims/RESET = SubResource( 3 )
 anims/blinking = SubResource( 4 )
 "anims/fade in" = SubResource( 5 )
 "anims/fade out" = SubResource( 6 )
+"anims/fade out instant" = SubResource( 8 )
 
 [node name="Dead" type="Node2D" parent="Graphics"]
 visible = false
diff --git a/PowerUp.tscn b/PowerUp.tscn
index 108f725..e361657 100644
--- a/PowerUp.tscn
+++ b/PowerUp.tscn
@@ -32,7 +32,7 @@ tracks/1/loop_wrap = true
 tracks/1/imported = false
 tracks/1/enabled = true
 tracks/1/keys = {
-"times": PoolRealArray( -0.2, 1.5 ),
+"times": PoolRealArray( 0, 1.5 ),
 "transitions": PoolRealArray( 1, 1 ),
 "update": 0,
 "values": [ Vector2( 0.01, 0.01 ), Vector2( 1, 1 ) ]
@@ -69,7 +69,6 @@ tracks/1/keys = {
 }
 
 [node name="PowerUp" type="Node2D"]
-scale = Vector2( 0.01, 0.01 )
 script = ExtResource( 3 )
 
 [node name="Area2D" type="Area2D" parent="."]
@@ -82,9 +81,11 @@ position = Vector2( 0, 16 )
 shape = SubResource( 4 )
 
 [node name="Label" type="Label" parent="Area2D"]
-margin_left = -25.0
+anchor_left = 0.5
+anchor_right = 0.5
+margin_left = -26.0
 margin_top = 19.0
-margin_right = 26.0
+margin_right = 25.0
 margin_bottom = 54.0
 theme = ExtResource( 1 )
 text = "+SP"
diff --git a/Utils.gd b/Utils.gd
index c9b3af2..253ddea 100644
--- a/Utils.gd
+++ b/Utils.gd
@@ -20,3 +20,16 @@ static func filter(filter_function: FuncRef, candidate_array: Array)->Array:
 			filtered_array.append(candidate_value)
 
 	return filtered_array
+
+static func get_stack_string() -> String:
+	var stack = get_stack()
+	var result = ""
+	var index = 0
+	for item in stack:
+		var function = item.function
+		var line = item.line
+		var source = item.source
+		result += "%s: %s - %s - %s\n" % [ index, function, line, source ]
+		index += 1
+	return result
+	
diff --git a/World.gd b/World.gd
index 760ad76..d3403c3 100644
--- a/World.gd
+++ b/World.gd
@@ -23,13 +23,14 @@ func enemy_killed(_position: Vector2):
 	completed_objectives += 1
 func health_consumed():
 	$Player.heal()
-	$UI/HUD.show_message("+1 health", 1)
+#	$UI/HUD.show_message("+1 health", 1)
 func shield_consumed():
+	Utils.log("consuming a shield and sending a message")
 	$Player.enable_shield()
-	$UI/HUD.show_message("Shield!", 1)
+#	$UI/HUD.show_message("+1 shield", 1)
 func gold_consumed():
 	$UI/HUD.score += 5
-	$UI/HUD.show_message("+5 points", 1)
+#	$UI/HUD.show_message("+5 points", 1)
 	
 func create_enemy() -> Enemy:
 	var enemy = Enemy.instance()
@@ -39,7 +40,7 @@ func create_enemy() -> Enemy:
 
 func create_health() -> PowerUp:
 	var health = PowerUp.instance()
-	health.position = get_new_item_pos(1 + randf())
+	health.position = get_new_item_pos(randf() + .25)
 	health.connect("consumed", self, "health_consumed")
 	health.label = "+HP"
 	health.color = Color.green
@@ -47,7 +48,7 @@ func create_health() -> PowerUp:
 
 func create_shield() -> PowerUp:
 	var shield = PowerUp.instance()
-	shield.position = get_new_item_pos(1 + randf())
+	shield.position = get_new_item_pos(randf() + .5)
 	shield.connect("consumed", self, "shield_consumed")
 	shield.label = "Shield"
 	shield.color = Color.blue
@@ -112,18 +113,6 @@ func _process(_delta: float) -> void:
 		var enemy: Enemy = e
 		enemy.turn_towards($Player.position)
 
-	# remove environment nodes that are too far away
-	# as they are removed, they should replace themselves
-	var screen_radius = get_viewport().get_visible_rect().size.length() / 2 + 10
-	var env_items = $Environment.get_children()
-	for i in env_items:
-		var item: Node2D = i
-		var diff = $Player.global_position - item.global_position
-		var dist = diff.length()
-		var is_too_far = dist > (2.0 * screen_radius)
-		if is_too_far:
-			item.queue_free()
-
 func pause():
 	get_tree().paused = true
 	$UI/PauseMenu.show()
diff --git a/World.tscn b/World.tscn
index 6d6aa5c..3aea5cf 100644
--- a/World.tscn
+++ b/World.tscn
@@ -46,6 +46,7 @@ __meta__ = {
 visible = false
 
 [node name="Player" parent="." instance=ExtResource( 2 )]
+health = 5
 
 [node name="Environment" type="Node2D" parent="."]
 
@@ -146,7 +147,6 @@ round_precision = 13
 antialiased = true
 
 [connection signal="body_entered" from="Destination" to="." method="_on_Destination_body_entered"]
-[connection signal="shield_changed" from="Player" to="." method="_on_Player_shield_changed"]
 [connection signal="paused" from="UI/HUD" to="." method="_on_HUD_paused"]
 [connection signal="pressed" from="UI/PauseMenu/Panel/VBoxContainer/Button" to="." method="_on_Button_pressed"]
 [connection signal="pressed" from="UI/GameFinishedMenu/Panel/VBoxContainer/Button" to="." method="_on_Game_over_button_pressed"]