From d729c0a7a34f543f06ff03d8f1d83592a540ef23 Mon Sep 17 00:00:00 2001 From: pennyrigate Date: Tue, 30 Dec 2025 19:32:51 -0500 Subject: [PATCH] hud --- fonts/Super Mario Bros. NES.ttf | Bin 0 -> 163076 bytes fonts/Super Mario Bros. NES.ttf.import | 36 ++++++++++++++++++++ globals/currentgame.gd | 24 ++++++++++++++ globals/currentgame.gd.uid | 1 + globals/currentgame.tscn | 6 ++++ gui/hud.gd | 6 ++++ gui/hud.gd.uid | 1 + gui/hud.tscn | 44 +++++++++++++++++++++++++ objects/bosses/tesu.gd | 1 + objects/graze/graze_particles.tscn | 32 ++++++++++++++++++ objects/player/player.gd | 11 +++++++ objects/player/player.tscn | 15 +++++++-- project.godot | 6 ++++ scenes/test_scene_penny.tscn | 6 ++++ 14 files changed, 187 insertions(+), 2 deletions(-) create mode 100644 fonts/Super Mario Bros. NES.ttf create mode 100644 fonts/Super Mario Bros. NES.ttf.import create mode 100644 globals/currentgame.gd create mode 100644 globals/currentgame.gd.uid create mode 100644 globals/currentgame.tscn create mode 100644 gui/hud.gd create mode 100644 gui/hud.gd.uid create mode 100644 gui/hud.tscn create mode 100644 objects/graze/graze_particles.tscn diff --git a/fonts/Super Mario Bros. NES.ttf b/fonts/Super Mario Bros. NES.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b6cd7d9653b5e357298f7dd73f06cec531061f54 GIT binary patch literal 163076 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 z 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 literal 0 HcmV?d00001 diff --git a/fonts/Super Mario Bros. NES.ttf.import b/fonts/Super Mario Bros. NES.ttf.import new file mode 100644 index 0000000..16520b1 --- /dev/null +++ b/fonts/Super Mario Bros. NES.ttf.import @@ -0,0 +1,36 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://dseq0eyk0say1" +path="res://.godot/imported/Super Mario Bros. NES.ttf-ea2dfdfff0c2f0101086d00b32189147.fontdata" + +[deps] + +source_file="res://fonts/Super Mario Bros. NES.ttf" +dest_files=["res://.godot/imported/Super Mario Bros. NES.ttf-ea2dfdfff0c2f0101086d00b32189147.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +disable_embedded_bitmaps=true +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +modulate_color_glyphs=false +hinting=1 +subpixel_positioning=4 +keep_rounding_remainders=true +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/globals/currentgame.gd b/globals/currentgame.gd new file mode 100644 index 0000000..d0e2f93 --- /dev/null +++ b/globals/currentgame.gd @@ -0,0 +1,24 @@ +extends Node + +@export var score = 0 +@export var graze = 0 +@export var level_graze = 0 +@export var lives = 2 +@export var bombs = 3 + +func change_score(amount): + score += amount + Hud.score_label = str("SCORE: ") + str(score) + +func change_graze(amount): + graze += amount + level_graze += amount + Hud.graze_label = str("GRAZE: ") + str(level_graze) + +func change_lives(amount): + lives += amount + Hud.lives_label = str("GRAZE: ") + str(lives) + +func change_bombs(amount): + bombs += amount + Hud.bombs_label = str("GRAZE: ") + str(bombs) diff --git a/globals/currentgame.gd.uid b/globals/currentgame.gd.uid new file mode 100644 index 0000000..0d61e32 --- /dev/null +++ b/globals/currentgame.gd.uid @@ -0,0 +1 @@ +uid://4lh6pskiiq1c diff --git a/globals/currentgame.tscn b/globals/currentgame.tscn new file mode 100644 index 0000000..17ea3dc --- /dev/null +++ b/globals/currentgame.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://yibsx87q42c1"] + +[ext_resource type="Script" uid="uid://4lh6pskiiq1c" path="res://globals/currentgame.gd" id="1_0tn8j"] + +[node name="CurrentGame" type="Node"] +script = ExtResource("1_0tn8j") diff --git a/gui/hud.gd b/gui/hud.gd new file mode 100644 index 0000000..41753d0 --- /dev/null +++ b/gui/hud.gd @@ -0,0 +1,6 @@ +extends CanvasLayer + +@onready var score_label = $Score +@onready var graze_label = $Graze +@onready var lives_label = $Lives +@onready var bombs_label = $Bombs diff --git a/gui/hud.gd.uid b/gui/hud.gd.uid new file mode 100644 index 0000000..856bc31 --- /dev/null +++ b/gui/hud.gd.uid @@ -0,0 +1 @@ +uid://p8hkie00rjtx diff --git a/gui/hud.tscn b/gui/hud.tscn new file mode 100644 index 0000000..801f560 --- /dev/null +++ b/gui/hud.tscn @@ -0,0 +1,44 @@ +[gd_scene load_steps=3 format=3 uid="uid://6vjf1falt0a7"] + +[ext_resource type="FontFile" uid="uid://dseq0eyk0say1" path="res://fonts/Super Mario Bros. NES.ttf" id="1_350da"] +[ext_resource type="Script" uid="uid://p8hkie00rjtx" path="res://gui/hud.gd" id="1_u7rvv"] + +[node name="Hud" type="CanvasLayer" groups=["viewport_autoload"]] +script = ExtResource("1_u7rvv") + +[node name="Score" type="Label" parent="."] +offset_left = 4.0 +offset_top = 4.0 +offset_right = 132.0 +offset_bottom = 13.0 +theme_override_fonts/font = ExtResource("1_350da") +theme_override_font_sizes/font_size = 8 +text = "Score:0000000000" + +[node name="Graze" type="Label" parent="."] +offset_left = 4.0 +offset_top = 15.0 +offset_right = 132.0 +offset_bottom = 26.0 +theme_override_fonts/font = ExtResource("1_350da") +theme_override_font_sizes/font_size = 8 +text = "Graze:0" + +[node name="Lives" type="Label" parent="."] +offset_left = 4.0 +offset_top = 309.0 +offset_right = 132.0 +offset_bottom = 320.0 +theme_override_fonts/font = ExtResource("1_350da") +theme_override_font_sizes/font_size = 8 +text = "Lives:2" + +[node name="Bombs" type="Label" parent="."] +offset_left = 108.0 +offset_top = 309.0 +offset_right = 236.0 +offset_bottom = 320.0 +theme_override_fonts/font = ExtResource("1_350da") +theme_override_font_sizes/font_size = 8 +text = "Bombs:3" +horizontal_alignment = 2 diff --git a/objects/bosses/tesu.gd b/objects/bosses/tesu.gd index aee9966..407e917 100644 --- a/objects/bosses/tesu.gd +++ b/objects/bosses/tesu.gd @@ -3,6 +3,7 @@ extends Node2D var health = 100.0 func _on_area_2d_area_entered(area: Area2D) -> void: + CurrentGame.change_score(100) %HurtSound.play() health -= 0.25 print(%Movements.current_animation) diff --git a/objects/graze/graze_particles.tscn b/objects/graze/graze_particles.tscn new file mode 100644 index 0000000..fb42620 --- /dev/null +++ b/objects/graze/graze_particles.tscn @@ -0,0 +1,32 @@ +[gd_scene load_steps=4 format=3 uid="uid://ykg8dydq006a"] + +[ext_resource type="Script" uid="uid://bdcxqp8royr5u" path="res://objects/scoreitem/scoreitem_particles.gd" id="1_s0vci"] +[ext_resource type="AudioStream" uid="uid://bv6v7v5dtvoii" path="res://audio/sfx/graze.wav" id="2_55vho"] + +[sub_resource type="Gradient" id="Gradient_aeam7"] +offsets = PackedFloat32Array(0, 0.513333, 1) +colors = PackedColorArray(0, 0.647059, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1) + +[node name="CPUParticles2D" type="CPUParticles2D"] +emitting = false +amount = 24 +lifetime = 0.15 +one_shot = true +speed_scale = 0.5 +explosiveness = 0.6 +randomness = 1.0 +lifetime_randomness = 1.0 +spread = 154.09 +gravity = Vector2(0, 630) +initial_velocity_min = 251.99 +initial_velocity_max = 484.86 +scale_amount_min = 1.5 +scale_amount_max = 2.5 +color_ramp = SubResource("Gradient_aeam7") +script = ExtResource("1_s0vci") + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource("2_55vho") +autoplay = true + +[connection signal="finished" from="." to="." method="_on_finished"] diff --git a/objects/player/player.gd b/objects/player/player.gd index cc21c70..d42acac 100644 --- a/objects/player/player.gd +++ b/objects/player/player.gd @@ -21,3 +21,14 @@ func _physics_process(delta: float) -> void: func _on_hurtbox_area_entered(area: Area2D) -> void: %DeathSound.play() position = startpos + CurrentGame.change_lives(-1) + if CurrentGame.lives < 0: + gover() + +func gover(): + print("yeeeowtch!!!") + +func _on_graze_box_area_entered(area: Area2D) -> void: + %GrazeParticles.emitting = true + CurrentGame.change_graze(1) + diff --git a/objects/player/player.tscn b/objects/player/player.tscn index 210394c..cc81483 100644 --- a/objects/player/player.tscn +++ b/objects/player/player.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=11 format=3 uid="uid://c714s5d7d5765"] +[gd_scene load_steps=12 format=3 uid="uid://c714s5d7d5765"] [ext_resource type="Script" uid="uid://bpo15kuxdmulu" path="res://objects/player/player.gd" id="1_cqmt1"] [ext_resource type="Texture2D" uid="uid://cre6i8tsdlt7j" path="res://graphics/player/player_1.png" id="2_jnjyq"] [ext_resource type="Texture2D" uid="uid://cr8jegbgl0wxn" path="res://graphics/player/player_3.png" id="3_gnkmh"] [ext_resource type="PackedScene" uid="uid://bs0tv5ubqdjp0" path="res://objects/player/bullet_emitter/player_bullet_emitter.tscn" id="3_ssrue"] [ext_resource type="AudioStream" uid="uid://b3byh6su1b11r" path="res://audio/sounds/se_boom.wav" id="5_gnkmh"] +[ext_resource type="PackedScene" uid="uid://ykg8dydq006a" path="res://objects/graze/graze_particles.tscn" id="6_xkryw"] [sub_resource type="SpriteFrames" id="SpriteFrames_xkryw"] animations = [{ @@ -30,7 +31,7 @@ size = Vector2(4, 4) size = Vector2(22, 22) [sub_resource type="CircleShape2D" id="CircleShape2D_gnkmh"] -radius = 5.0990195 +radius = 13.038404 [node name="Player" type="CharacterBody2D"] collision_layer = 2 @@ -69,6 +70,7 @@ shape = SubResource("RectangleShape2D_jnjyq") [node name="GrazeBox" type="Area2D" parent="."] position = Vector2(0, -1) +collision_mask = 8 [node name="CollisionShape2D" type="CollisionShape2D" parent="GrazeBox"] shape = SubResource("CircleShape2D_gnkmh") @@ -78,4 +80,13 @@ debug_color = Color(0.7740294, 0.14773864, 0.99999994, 0.41960785) unique_name_in_owner = true stream = ExtResource("5_gnkmh") +[node name="GrazeParticles" parent="." instance=ExtResource("6_xkryw")] +unique_name_in_owner = true +amount = 10 +scale_amount_min = 1.0 +scale_amount_max = 1.0 +script = null + [connection signal="area_entered" from="Hurtbox" to="." method="_on_hurtbox_area_entered"] +[connection signal="area_entered" from="GrazeBox" to="." method="_on_graze_box_area_entered"] +[connection signal="finished" from="GrazeParticles" to="." method="_on_cpu_particles_2d_finished"] diff --git a/project.godot b/project.godot index b214ee4..9247ee8 100644 --- a/project.godot +++ b/project.godot @@ -21,6 +21,8 @@ Background="*res://globals/background.tscn" Display="*res://globals/display.tscn" SceneStack="*res://globals/scene_stack.gd" DebugOverlay="*res://globals/debug_overlay.tscn" +CurrentGame="*res://globals/currentgame.tscn" +Hud="*res://gui/hud.tscn" [display] @@ -42,6 +44,10 @@ folder_colors={ "res://systems/": "red" } +[global_group] + +viewport_autoload="" + [input] move_left={ diff --git a/scenes/test_scene_penny.tscn b/scenes/test_scene_penny.tscn index 8c9eddc..920bda5 100644 --- a/scenes/test_scene_penny.tscn +++ b/scenes/test_scene_penny.tscn @@ -53,3 +53,9 @@ position = Vector2(124, 81) [node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] stream = ExtResource("5_wcm38") autoplay = true + +[node name="Label" type="Label" parent="."] +offset_right = 40.0 +offset_bottom = 23.0 +text = "SCORE: 000000000 +GRAZE: 0"