From e2fae9368e589625580df272edf0d89aa5d9cb6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Fabian=20Ke=C3=9Fler?=
 <fabian.kessler@stud-mail.uni-wuerzburg.de>
Date: Sat, 15 Mar 2025 22:33:33 +0100
Subject: [PATCH] Add hud elements

---
 pulsjam2025/NPC/penguin/group.gd              |   1 +
 pulsjam2025/NPC/penguin/penguin.gd            |   2 +
 pulsjam2025/Player/PlayerScene.tscn           |   7 +-
 pulsjam2025/Player/TestScene.tscn             |   3 -
 pulsjam2025/Player/camera/camera_2d.tscn      |  92 ++++++++++++
 .../Screenshot 2025-03-15 at 22.17.23.png     | Bin 0 -> 15204 bytes
 ...reenshot 2025-03-15 at 22.17.23.png.import |  34 +++++
 pulsjam2025/globals.gd                        |  15 +-
 pulsjam2025/hud/hud.tscn                      | 137 +++++++++++++++++-
 pulsjam2025/project.godot                     |   2 +-
 pulsjam2025/schollen_spektakel.tscn           |  11 +-
 11 files changed, 282 insertions(+), 22 deletions(-)
 create mode 100644 pulsjam2025/Player/camera/camera_2d.tscn
 create mode 100644 pulsjam2025/Screenshot 2025-03-15 at 22.17.23.png
 create mode 100644 pulsjam2025/Screenshot 2025-03-15 at 22.17.23.png.import

diff --git a/pulsjam2025/NPC/penguin/group.gd b/pulsjam2025/NPC/penguin/group.gd
index 370d21a..784042e 100644
--- a/pulsjam2025/NPC/penguin/group.gd
+++ b/pulsjam2025/NPC/penguin/group.gd
@@ -10,6 +10,7 @@ var penguin_scene: PackedScene = load("res://NPC/penguin/penguin.tscn")
 var penguins : Array[Penguin] = []
 
 func _ready() -> void:
+	Globals.pengu_group = self
 	timer.connect("timeout", Callable(self, "_on_timer_timeout"))
 	start_random_timer()
 	
diff --git a/pulsjam2025/NPC/penguin/penguin.gd b/pulsjam2025/NPC/penguin/penguin.gd
index 90c1864..aa27a0e 100644
--- a/pulsjam2025/NPC/penguin/penguin.gd
+++ b/pulsjam2025/NPC/penguin/penguin.gd
@@ -64,6 +64,8 @@ func _process(delta: float) -> void:
 	var dir = (target - position).normalized()
 	var bump_dir = Vector2.ZERO
 	
+	self.rotation = -get_parent().rotation
+	
 	var near_areas: Array[Area2D] = $Area2D.get_overlapping_areas();
 	cluster_score = 0
 	for area in near_areas: 
diff --git a/pulsjam2025/Player/PlayerScene.tscn b/pulsjam2025/Player/PlayerScene.tscn
index fd78fcb..e4c60cc 100644
--- a/pulsjam2025/Player/PlayerScene.tscn
+++ b/pulsjam2025/Player/PlayerScene.tscn
@@ -1,4 +1,4 @@
-[gd_scene load_steps=22 format=3 uid="uid://cwmunv68b7txk"]
+[gd_scene load_steps=23 format=3 uid="uid://cwmunv68b7txk"]
 
 [ext_resource type="Script" uid="uid://babk78kqf724a" path="res://Player/PlayerMovement.gd" id="1_ihrqt"]
 [ext_resource type="PackedScene" uid="uid://dfe8d0dg2yioj" path="res://Player/FishScene.tscn" id="2_rded7"]
@@ -11,6 +11,7 @@
 [ext_resource type="Texture2D" uid="uid://c771pbnvtsr6t" path="res://Player/bird_up_2.png" id="9_dplev"]
 [ext_resource type="Texture2D" uid="uid://0il2dq67vsbg" path="res://Player/bird_down.png" id="10_7d6og"]
 [ext_resource type="Texture2D" uid="uid://uc2v17mafr6n" path="res://Player/bird_down_2.png" id="11_183bc"]
+[ext_resource type="PackedScene" uid="uid://bx2qxdfk08ti8" path="res://Player/camera/camera_2d.tscn" id="12_183bc"]
 
 [sub_resource type="GDScript" id="GDScript_yjw77"]
 
@@ -311,8 +312,6 @@ area2D = NodePath("Area2D")
 [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
 shape = SubResource("CircleShape2D_ihrqt")
 
-[node name="AudioListener2D" type="AudioListener2D" parent="."]
-
 [node name="FishCooldownTimer" type="Timer" parent="."]
 one_shot = true
 
@@ -342,6 +341,8 @@ libraries = {
 }
 speed_scale = 1.5
 
+[node name="Camera" parent="." instance=ExtResource("12_183bc")]
+
 [connection signal="timeout" from="FishCooldownTimer" to="." method="_on_fish_cooldown_timer_timeout"]
 [connection signal="timeout" from="FishDespawnTimer" to="." method="_on_fish_despawn_timer_timeout"]
 [connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"]
diff --git a/pulsjam2025/Player/TestScene.tscn b/pulsjam2025/Player/TestScene.tscn
index 368a71e..2a51d25 100644
--- a/pulsjam2025/Player/TestScene.tscn
+++ b/pulsjam2025/Player/TestScene.tscn
@@ -5,9 +5,6 @@
 
 [node name="TestScene" type="Node2D"]
 
-[node name="Camera2D" type="Camera2D" parent="."]
-position = Vector2(591, 335)
-
 [node name="SchollenSpektakel" parent="." instance=ExtResource("2_oh42m")]
 position = Vector2(-17, 66)
 
diff --git a/pulsjam2025/Player/camera/camera_2d.tscn b/pulsjam2025/Player/camera/camera_2d.tscn
new file mode 100644
index 0000000..39d8a6c
--- /dev/null
+++ b/pulsjam2025/Player/camera/camera_2d.tscn
@@ -0,0 +1,92 @@
+[gd_scene load_steps=3 format=3 uid="uid://bx2qxdfk08ti8"]
+
+[ext_resource type="PackedScene" uid="uid://coryu5r8revlm" path="res://hud/hud.tscn" id="1_hmhh6"]
+
+[sub_resource type="GDScript" id="GDScript_etdkj"]
+script/source = "extends Node
+
+@onready var player = get_parent()
+@onready var base_zoom: Vector2 = %Cam.zoom
+@onready var min_zoom := Vector2(0.5, 0.5)
+@onready var max_zoom := Vector2(0.9, 0.9)
+
+# ScreenShake logic
+@export var max_offset: float = 5.0
+@export var max_roll: float = 10.0
+@export var shakeReduction: float = 2.5
+
+@export var move_factor := 30.0
+
+var stress: float = 0.0
+var shake: float = 0.0
+
+var extra_zoom := Vector2.ZERO
+var zoom_accel := Vector2.ZERO
+
+func _ready() -> void:
+	Globals.camera = self
+
+func _physics_process(delta: float) -> void:
+	if not Globals.level_center:
+		return
+	
+	# Position
+	var pos = Globals.level_center.global_position + (player.global_position + Globals.level_center.global_position) / move_factor
+	%Cam.offset = pos -Vector2.ONE * 50
+	#print(%Cam.global_position)
+	
+	# Zoom
+	zoom_accel = zoom_accel / 2.0
+	zoom_accel += Vector2(player.velocity.length(), player.velocity.length()) / 1000000 - Vector2.ONE / 2000
+	var distance = player.global_position.distance_to(Globals.level_center.global_position)
+	extra_zoom = -Vector2(distance, distance) / 100000
+	extra_zoom = clamp(extra_zoom + zoom_accel, min_zoom - base_zoom, max_zoom - base_zoom)
+	
+	#print(extra_zoom, zoom_accel, distance, pos, %Cam.global_position)
+	
+	%Cam.zoom = base_zoom + extra_zoom
+	_process_shake(delta)
+
+func _process_shake(delta) -> void:
+	# Lerp to normal position/rotation
+	%Cam.rotation_degrees = lerp( %Cam.rotation_degrees, 0.0, delta * 5.0)
+	
+	%Cam.position.x = lerp( %Cam.position.x, 0.0, delta * 5.0)
+	%Cam.position.y = lerp( %Cam.position.y, 0.0, delta * 5.0)
+	
+	# Shake logic
+	shake = stress * stress
+	
+	# Rotation
+	%Cam.rotation_degrees += max_roll * shake * _get_noise(randi(), delta) * 100
+	
+	# Position
+	var offset_x = max_offset * shake * _get_noise(randi(), delta + 1.0)
+	var offset_y = max_offset * shake * _get_noise(randi(), delta + 2.0)
+	
+	%Cam.position = Vector2(offset_x, offset_y) * 10
+	
+	# Shake reduction
+	stress -= shakeReduction * delta
+	stress = max(0, stress)
+
+func _get_noise(noise_seed, time) -> float:
+	var n = FastNoiseLite.new()
+	n.seed = noise_seed
+	
+	return n.get_noise_1d(time)
+
+func add_stress(amount: float) -> void:
+	stress += amount
+	stress = max(0, stress)
+"
+
+[node name="Camera" type="Node"]
+script = SubResource("GDScript_etdkj")
+
+[node name="Cam" type="Camera2D" parent="."]
+unique_name_in_owner = true
+
+[node name="CanvasLayer" type="CanvasLayer" parent="Cam"]
+
+[node name="HUD" parent="Cam/CanvasLayer" instance=ExtResource("1_hmhh6")]
diff --git a/pulsjam2025/Screenshot 2025-03-15 at 22.17.23.png b/pulsjam2025/Screenshot 2025-03-15 at 22.17.23.png
new file mode 100644
index 0000000000000000000000000000000000000000..becd10576834e1cd5441d5fae8cd19fa7d9cd1a8
GIT binary patch
literal 15204
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
MQ~yTUb%%%l2T%{gsQ>@~

literal 0
HcmV?d00001

diff --git a/pulsjam2025/Screenshot 2025-03-15 at 22.17.23.png.import b/pulsjam2025/Screenshot 2025-03-15 at 22.17.23.png.import
new file mode 100644
index 0000000..845d2dc
--- /dev/null
+++ b/pulsjam2025/Screenshot 2025-03-15 at 22.17.23.png.import	
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bgcrh2gh8dd7d"
+path="res://.godot/imported/Screenshot 2025-03-15 at 22.17.23.png-d8fba5094fe8ec212930d27b8114ca90.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://Screenshot 2025-03-15 at 22.17.23.png"
+dest_files=["res://.godot/imported/Screenshot 2025-03-15 at 22.17.23.png-d8fba5094fe8ec212930d27b8114ca90.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
diff --git a/pulsjam2025/globals.gd b/pulsjam2025/globals.gd
index 69e617d..6bdf9d8 100644
--- a/pulsjam2025/globals.gd
+++ b/pulsjam2025/globals.gd
@@ -1,19 +1,32 @@
 extends Node
 
 signal score_changed
+signal highscore_changed
 
 var level_center: Node2D = null
 
 var ice_floes: Array[IceFloe] = []
 
+var camera: Node = null
+
 var score: int = 0:
 	set(val):
 		score = val
 		emit_signal("score_changed", val)
 
+var highscore: int = 0:
+	set(val):
+		score = val
+		emit_signal("highscore_changed", val)
+
+var pengu_group: Node
+
 var _score_timer := Timer.new()
 
 func start_round():
+	if not pengu_group:
+		printerr("Cant start - No pengu group")
+		return
 	add_child(_score_timer)
-	_score_timer.timeout.connect(func(): score += 1)
+	_score_timer.timeout.connect(func(): score += pengu_group.n_penguins)
 	_score_timer.start(1.0)
diff --git a/pulsjam2025/hud/hud.tscn b/pulsjam2025/hud/hud.tscn
index 756b815..e36ffa6 100644
--- a/pulsjam2025/hud/hud.tscn
+++ b/pulsjam2025/hud/hud.tscn
@@ -1,20 +1,34 @@
-[gd_scene load_steps=4 format=3 uid="uid://coryu5r8revlm"]
+[gd_scene load_steps=6 format=3 uid="uid://coryu5r8revlm"]
 
 [ext_resource type="FontFile" uid="uid://2c10u3pux7je" path="res://Winter Minie.ttf" id="1_6ca3a"]
+[ext_resource type="Texture2D" uid="uid://bgcrh2gh8dd7d" path="res://Screenshot 2025-03-15 at 22.17.23.png" id="2_2gk58"]
 
 [sub_resource type="GDScript" id="GDScript_6ca3a"]
 script/source = "extends Control
 
 func _ready() -> void:
 	Globals.score_changed.connect(update_score)
+	Globals.highscore_changed.connect(update_highscore)
 
 func update_score(score) -> void:
-	$MarginContainer/ScoreLabel.text = str(score)
+	%ScoreLabel.text = str(score)
+	%SCORE.text = str(score)
+
+func update_highscore(score) -> void:
+	%HIGHSCORE.text = str(score)
 "
 
 [sub_resource type="LabelSettings" id="LabelSettings_2gk58"]
 font = ExtResource("1_6ca3a")
 font_size = 86
+shadow_size = 5
+shadow_color = Color(0, 0, 0, 0.21)
+
+[sub_resource type="LabelSettings" id="LabelSettings_318vg"]
+font = ExtResource("1_6ca3a")
+font_size = 36
+shadow_size = 11
+shadow_color = Color(0, 0, 0, 0.21)
 
 [node name="HUD" type="Control"]
 layout_mode = 3
@@ -27,7 +41,7 @@ size_flags_horizontal = 3
 size_flags_vertical = 3
 script = SubResource("GDScript_6ca3a")
 
-[node name="MarginContainer" type="MarginContainer" parent="."]
+[node name="Gameplay" type="MarginContainer" parent="."]
 layout_mode = 1
 anchors_preset = 15
 anchor_right = 1.0
@@ -37,9 +51,124 @@ grow_vertical = 2
 theme_override_constants/margin_left = 20
 theme_override_constants/margin_top = 20
 
-[node name="ScoreLabel" type="Label" parent="MarginContainer"]
+[node name="ScoreLabel" type="Label" parent="Gameplay"]
+unique_name_in_owner = true
 layout_mode = 2
 size_flags_horizontal = 0
 size_flags_vertical = 0
 text = "0"
 label_settings = SubResource("LabelSettings_2gk58")
+
+[node name="Start" type="MarginContainer" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 20
+theme_override_constants/margin_top = 20
+
+[node name="TextureRect" type="TextureRect" parent="Start"]
+layout_mode = 2
+size_flags_vertical = 0
+texture = ExtResource("2_2gk58")
+stretch_mode = 3
+
+[node name="CenterContainer" type="CenterContainer" parent="Start"]
+layout_mode = 2
+
+[node name="label" type="Label" parent="Start/CenterContainer"]
+layout_mode = 2
+size_flags_horizontal = 0
+size_flags_vertical = 0
+text = "
+
+
+
+Press any key to
+Start"
+label_settings = SubResource("LabelSettings_2gk58")
+horizontal_alignment = 1
+
+[node name="GameOver" type="MarginContainer" parent="."]
+visible = false
+layout_mode = 1
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+theme_override_constants/margin_left = 20
+theme_override_constants/margin_top = 20
+
+[node name="CenterContainer" type="CenterContainer" parent="GameOver"]
+layout_mode = 2
+
+[node name="VBoxContainer" type="VBoxContainer" parent="GameOver/CenterContainer"]
+layout_mode = 2
+alignment = 1
+
+[node name="ScoreLabel" type="Label" parent="GameOver/CenterContainer/VBoxContainer"]
+modulate = Color(0.999969, 0.614075, 0.555964, 1)
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 0
+text = "-Game Over-"
+label_settings = SubResource("LabelSettings_2gk58")
+horizontal_alignment = 1
+
+[node name="HBoxContainer2" type="HBoxContainer" parent="GameOver/CenterContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="ScoreLabel2" type="Label" parent="GameOver/CenterContainer/VBoxContainer/HBoxContainer2"]
+modulate = Color(0.819655, 0.819655, 0.819655, 1)
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 0
+text = "Score:"
+label_settings = SubResource("LabelSettings_2gk58")
+horizontal_alignment = 1
+
+[node name="SCORE" type="Label" parent="GameOver/CenterContainer/VBoxContainer/HBoxContainer2"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 10
+size_flags_vertical = 0
+text = "0"
+label_settings = SubResource("LabelSettings_2gk58")
+horizontal_alignment = 2
+
+[node name="HBoxContainer" type="HBoxContainer" parent="GameOver/CenterContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="ScoreLabel2" type="Label" parent="GameOver/CenterContainer/VBoxContainer/HBoxContainer"]
+modulate = Color(0.819655, 0.819655, 0.819655, 1)
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 0
+text = "Highscore:"
+label_settings = SubResource("LabelSettings_2gk58")
+horizontal_alignment = 1
+
+[node name="HIGHSCORE" type="Label" parent="GameOver/CenterContainer/VBoxContainer/HBoxContainer"]
+unique_name_in_owner = true
+layout_mode = 2
+size_flags_horizontal = 10
+size_flags_vertical = 0
+text = "0"
+label_settings = SubResource("LabelSettings_2gk58")
+horizontal_alignment = 2
+
+[node name="HSeparator" type="HSeparator" parent="GameOver/CenterContainer/VBoxContainer"]
+layout_mode = 2
+
+[node name="ScoreLabel2" type="Label" parent="GameOver/CenterContainer/VBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 4
+size_flags_vertical = 0
+text = "
+Press SPACE to continue"
+label_settings = SubResource("LabelSettings_318vg")
+horizontal_alignment = 1
diff --git a/pulsjam2025/project.godot b/pulsjam2025/project.godot
index 026e724..976f7b5 100644
--- a/pulsjam2025/project.godot
+++ b/pulsjam2025/project.godot
@@ -11,7 +11,7 @@ config_version=5
 [application]
 
 config/name="PulsJam2025"
-run/main_scene="uid://ch1i0q8d6r4f0"
+run/main_scene="uid://byb21wlyercnu"
 config/features=PackedStringArray("4.4")
 
 [autoload]
diff --git a/pulsjam2025/schollen_spektakel.tscn b/pulsjam2025/schollen_spektakel.tscn
index e513534..794540e 100644
--- a/pulsjam2025/schollen_spektakel.tscn
+++ b/pulsjam2025/schollen_spektakel.tscn
@@ -1,11 +1,10 @@
-[gd_scene load_steps=10 format=3 uid="uid://ch1i0q8d6r4f0"]
+[gd_scene load_steps=9 format=3 uid="uid://ch1i0q8d6r4f0"]
 
 [ext_resource type="Script" uid="uid://cik8umdfv5587" path="res://schollen_spektakel.gd" id="1_ij3xc"]
 [ext_resource type="PackedScene" uid="uid://d1vv1o7g2lp01" path="res://water/water.tscn" id="2_hycu0"]
 [ext_resource type="PackedScene" uid="uid://diilm3qbp1tly" path="res://ice_floe/ice_floe.tscn" id="2_ij3xc"]
 [ext_resource type="PackedScene" uid="uid://b23bxmjrcknm3" path="res://center_pos.tscn" id="4_6ndi4"]
 [ext_resource type="PackedScene" uid="uid://cgkfkbiyl02yl" path="res://ice_floe/floe_area.tscn" id="5_doghl"]
-[ext_resource type="PackedScene" uid="uid://coryu5r8revlm" path="res://hud/hud.tscn" id="6_2ljra"]
 
 [sub_resource type="FastNoiseLite" id="FastNoiseLite_doghl"]
 resource_local_to_scene = true
@@ -55,11 +54,3 @@ script = SubResource("GDScript_2ljra")
 
 [node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="FloeArea"]
 polygon = PackedVector2Array(-7071, -5132, 10762, -5282, 9681, 5706, -7101, 5466, -24, 690, 1193, 681, 1196, -60, -43, -63, -41, 697, -7131, 5464)
-
-[node name="Camera2D" type="Camera2D" parent="."]
-position = Vector2(591, 335)
-
-[node name="CanvasLayer" type="CanvasLayer" parent="Camera2D"]
-
-[node name="HUD" parent="Camera2D/CanvasLayer" instance=ExtResource("6_2ljra")]
-metadata/_edit_use_anchors_ = true
-- 
GitLab