From c30cc4589e52ed967d5e3167ff98314a95cda920 Mon Sep 17 00:00:00 2001 From: zoe Date: Sun, 28 Nov 2021 14:51:08 +0100 Subject: [PATCH] add heart level, bugfixes --- Ball/Ball.gd | 3 +- Ball/Ball.tscn | 2 +- HUD/HUD.tscn | 19 +++- HUD/PinksLabel.gd | 10 ++ Menu/LevelList.tscn | 5 +- Pegs/Pink/PinkPeg.gd | 7 +- Stages/EmptyStage.tscn | 28 +----- Stages/Heart.tscn | 216 +++++++++++++++++++++++++++++++++++++++++ Stats/GameStats.gd | 11 ++- 9 files changed, 265 insertions(+), 36 deletions(-) create mode 100644 HUD/PinksLabel.gd create mode 100644 Stages/Heart.tscn diff --git a/Ball/Ball.gd b/Ball/Ball.gd index 51d6682..967439b 100644 --- a/Ball/Ball.gd +++ b/Ball/Ball.gd @@ -15,6 +15,7 @@ func _ready(): cameraTransform.position = Vector2.ZERO animation.play("reset") GameStats.balls_left = GameStats.max_balls + GameStats.connect("game_won", self, "queue_free") func _physics_process(_delta): match state: @@ -32,7 +33,7 @@ func handle_collisions(): for collider in collider_array: set_particle_direction(collider) bounce_of(collider) - turn_pegs_green(collider) + call_deferred("turn_pegs_green", collider) func turn_pegs_green(collider): # check if pegs can be turned green diff --git a/Ball/Ball.tscn b/Ball/Ball.tscn index 0868ae1..06f64a5 100644 --- a/Ball/Ball.tscn +++ b/Ball/Ball.tscn @@ -69,7 +69,7 @@ collision_mask = 13 mass = 90.0 physics_material_override = ExtResource( 3 ) continuous_cd = 2 -contacts_reported = 4 +contacts_reported = 1 contact_monitor = true linear_velocity = Vector2( 0, -10 ) script = ExtResource( 2 ) diff --git a/HUD/HUD.tscn b/HUD/HUD.tscn index a867139..386b56f 100644 --- a/HUD/HUD.tscn +++ b/HUD/HUD.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=7 format=2] [ext_resource path="res://Ball/sprite.png" type="Texture" id=1] [ext_resource path="res://HUD/BallCounter.gd" type="Script" id=2] [ext_resource path="res://HUD/Multiplier.gd" type="Script" id=3] [ext_resource path="res://Menu/Theme.tres" type="Theme" id=4] [ext_resource path="res://HUD/Score.gd" type="Script" id=5] +[ext_resource path="res://HUD/PinksLabel.gd" type="Script" id=6] [node name="HUD" type="CanvasLayer"] @@ -25,9 +26,9 @@ script = ExtResource( 2 ) [node name="Multiplier" type="Label" parent="."] margin_left = 336.0 -margin_top = 176.0 +margin_top = 170.0 margin_right = 376.0 -margin_bottom = 190.0 +margin_bottom = 188.0 grow_horizontal = 0 grow_vertical = 0 theme = ExtResource( 4 ) @@ -38,6 +39,18 @@ __meta__ = { "_edit_use_anchors_": false } +[node name="PinksLabel" type="Label" parent="."] +margin_left = 16.0 +margin_top = 188.0 +margin_right = 72.0 +margin_bottom = 206.0 +theme = ExtResource( 4 ) +text = "Left:" +script = ExtResource( 6 ) +__meta__ = { +"_edit_use_anchors_": false +} + [node name="Score" type="Label" parent="."] margin_left = 336.0 margin_top = 192.0 diff --git a/HUD/PinksLabel.gd b/HUD/PinksLabel.gd new file mode 100644 index 0000000..f59a7a0 --- /dev/null +++ b/HUD/PinksLabel.gd @@ -0,0 +1,10 @@ +extends Label + +func _ready(): + visible = false + var _connected = GameStats.connect("pink_changed", self, "update_text") + call_deferred("update_text", GameStats.pinks_left) + +func update_text(value): + visible = true + text ="left " + String(value) diff --git a/Menu/LevelList.tscn b/Menu/LevelList.tscn index b299cb9..4e87d9d 100644 --- a/Menu/LevelList.tscn +++ b/Menu/LevelList.tscn @@ -21,13 +21,14 @@ margin_top = 2.0 margin_right = 170.0 margin_bottom = 438.0 -[node name="SceneSelectButton" parent="LevelListHBox" instance=ExtResource( 5 )] +[node name="Heart" parent="LevelListHBox" instance=ExtResource( 5 )] anchor_right = 0.0 anchor_bottom = 0.0 margin_right = 168.0 margin_bottom = 40.0 +text = "> Heart" icon = ExtResource( 2 ) -scene = "res://Stages/EmptyStage.tscn" +scene = "res://Stages/Heart.tscn" [node name="SceneSelectButton2" parent="LevelListHBox" instance=ExtResource( 5 )] anchor_right = 0.0 diff --git a/Pegs/Pink/PinkPeg.gd b/Pegs/Pink/PinkPeg.gd index b66daa4..962a7e6 100644 --- a/Pegs/Pink/PinkPeg.gd +++ b/Pegs/Pink/PinkPeg.gd @@ -1,6 +1,7 @@ extends StaticBody2D func _ready(): + var _connection = GameStats.connect("recount_pink", self, "count") GameStats.pinks_left += 1 # turns the pegs green @@ -19,10 +20,10 @@ func make_green(): $ScoreCounter.trigger() #finally delete the old peg - GameStats.pinks_left -= 1 win_level() Engine.time_scale = 1 queue_free() + GameStats.recount_pink() func win_level(): if GameStats.pinks_left <= 0: @@ -47,3 +48,7 @@ func _on_LastPegCollision_body_entered(_body): func _on_Timer_timeout(): Engine.time_scale = 1 + +# adds count of 1 for every pink peg +func count(): + GameStats.pinks_left += 1 diff --git a/Stages/EmptyStage.tscn b/Stages/EmptyStage.tscn index f0441d9..b55fdb8 100644 --- a/Stages/EmptyStage.tscn +++ b/Stages/EmptyStage.tscn @@ -1,13 +1,11 @@ -[gd_scene load_steps=26 format=2] +[gd_scene load_steps=24 format=2] [ext_resource path="res://Cannon/Cannon.tscn" type="PackedScene" id=1] [ext_resource path="res://Borders/tileset.png" type="Texture" id=2] [ext_resource path="res://Ball/Ball.tscn" type="PackedScene" id=3] -[ext_resource path="res://Pegs/Yellow/YellowPeg.tscn" type="PackedScene" id=4] [ext_resource path="res://ControlElements/Killzone.tscn" type="PackedScene" id=5] [ext_resource path="res://Bucket/Bucket.tscn" type="PackedScene" id=6] [ext_resource path="res://HUD/HUD.tscn" type="PackedScene" id=7] -[ext_resource path="res://Pegs/Pink/PinkPeg.tscn" type="PackedScene" id=8] [ext_resource path="res://Stages/Camera.gd" type="Script" id=9] [ext_resource path="res://Stages/World.gd" type="Script" id=10] [ext_resource path="res://Effects/FadeIn.tscn" type="PackedScene" id=11] @@ -220,30 +218,6 @@ position = Vector2( 0, 248 ) [node name="Pegs" type="Node2D" parent="."] -[node name="PinkPeg" parent="Pegs" instance=ExtResource( 8 )] -position = Vector2( 190, 72 ) - -[node name="YellowPeg" parent="Pegs" instance=ExtResource( 4 )] -position = Vector2( 136, 101 ) - -[node name="YellowPeg3" parent="Pegs" instance=ExtResource( 4 )] -position = Vector2( 149, 112 ) - -[node name="YellowPeg4" parent="Pegs" instance=ExtResource( 4 )] -position = Vector2( 164, 131 ) - -[node name="YellowPeg5" parent="Pegs" instance=ExtResource( 4 )] -position = Vector2( 189, 121 ) - -[node name="YellowPeg6" parent="Pegs" instance=ExtResource( 4 )] -position = Vector2( 204, 111 ) - -[node name="YellowPeg7" parent="Pegs" instance=ExtResource( 4 )] -position = Vector2( 212, 126 ) - -[node name="YellowPeg2" parent="Pegs" instance=ExtResource( 4 )] -position = Vector2( 163, 115 ) - [node name="Bucket" parent="." instance=ExtResource( 6 )] position = Vector2( 192, 206 ) diff --git a/Stages/Heart.tscn b/Stages/Heart.tscn new file mode 100644 index 0000000..6f74391 --- /dev/null +++ b/Stages/Heart.tscn @@ -0,0 +1,216 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://Stages/EmptyStage.tscn" type="PackedScene" id=1] +[ext_resource path="res://Pegs/Pink/PinkPeg.tscn" type="PackedScene" id=2] +[ext_resource path="res://Pegs/Yellow/YellowPeg.tscn" type="PackedScene" id=3] +[ext_resource path="res://Pegs/Purple/PurplePeg.tscn" type="PackedScene" id=4] + +[node name="World" instance=ExtResource( 1 )] +stage_name = "Heart" +powerup_card = "res://Pegs/Yellow/PowerupCards/Scattershot.tscn" + +[node name="PinkPeg" parent="Pegs" index="0" instance=ExtResource( 2 )] +position = Vector2( 192, 128 ) + +[node name="PinkPeg2" parent="Pegs" index="1" instance=ExtResource( 2 )] +position = Vector2( 176, 120 ) + +[node name="PinkPeg3" parent="Pegs" index="2" instance=ExtResource( 2 )] +position = Vector2( 208, 120 ) + +[node name="PinkPeg6" parent="Pegs" index="3" instance=ExtResource( 2 )] +position = Vector2( 136, 136 ) + +[node name="PinkPeg7" parent="Pegs" index="4" instance=ExtResource( 2 )] +position = Vector2( 152, 152 ) + +[node name="PinkPeg8" parent="Pegs" index="5" instance=ExtResource( 2 )] +position = Vector2( 168, 160 ) + +[node name="PinkPeg9" parent="Pegs" index="6" instance=ExtResource( 2 )] +position = Vector2( 184, 168 ) + +[node name="PinkPeg10" parent="Pegs" index="7" instance=ExtResource( 2 )] +position = Vector2( 200, 168 ) + +[node name="PinkPeg11" parent="Pegs" index="8" instance=ExtResource( 2 )] +position = Vector2( 216, 160 ) + +[node name="PinkPeg12" parent="Pegs" index="9" instance=ExtResource( 2 )] +position = Vector2( 232, 152 ) + +[node name="PinkPeg13" parent="Pegs" index="10" instance=ExtResource( 2 )] +position = Vector2( 248, 136 ) + +[node name="PinkPeg4" parent="Pegs" index="11" instance=ExtResource( 2 )] +position = Vector2( 168, 104 ) + +[node name="PinkPeg5" parent="Pegs" index="12" instance=ExtResource( 2 )] +position = Vector2( 216, 104 ) + +[node name="PurplePeg" parent="Pegs" index="13" instance=ExtResource( 4 )] +position = Vector2( 168, 88 ) + +[node name="PurplePeg2" parent="Pegs" index="14" instance=ExtResource( 4 )] +position = Vector2( 208, 72 ) + +[node name="PurplePeg5" parent="Pegs" index="15" instance=ExtResource( 4 )] +position = Vector2( 208, 56 ) + +[node name="PurplePeg6" parent="Pegs" index="16" instance=ExtResource( 4 )] +position = Vector2( 176, 56 ) + +[node name="PurplePeg7" parent="Pegs" index="17" instance=ExtResource( 4 )] +position = Vector2( 160, 48 ) + +[node name="PurplePeg8" parent="Pegs" index="18" instance=ExtResource( 4 )] +position = Vector2( 224, 48 ) + +[node name="PurplePeg9" parent="Pegs" index="19" instance=ExtResource( 4 )] +position = Vector2( 152, 64 ) + +[node name="PurplePeg10" parent="Pegs" index="20" instance=ExtResource( 4 )] +position = Vector2( 232, 64 ) + +[node name="PurplePeg11" parent="Pegs" index="21" instance=ExtResource( 4 )] +position = Vector2( 144, 88 ) + +[node name="PurplePeg39" parent="Pegs" index="22" instance=ExtResource( 4 )] +position = Vector2( 128, 48 ) + +[node name="PurplePeg40" parent="Pegs" index="23" instance=ExtResource( 4 )] +position = Vector2( 256, 48 ) + +[node name="PurplePeg41" parent="Pegs" index="24" instance=ExtResource( 4 )] +position = Vector2( 264, 64 ) + +[node name="PurplePeg42" parent="Pegs" index="25" instance=ExtResource( 4 )] +position = Vector2( 120, 64 ) + +[node name="PurplePeg43" parent="Pegs" index="26" instance=ExtResource( 4 )] +position = Vector2( 136, 64 ) + +[node name="PurplePeg44" parent="Pegs" index="27" instance=ExtResource( 4 )] +position = Vector2( 248, 64 ) + +[node name="PurplePeg45" parent="Pegs" index="28" instance=ExtResource( 4 )] +position = Vector2( 256, 80 ) + +[node name="PurplePeg46" parent="Pegs" index="29" instance=ExtResource( 4 )] +position = Vector2( 128, 80 ) + +[node name="PurplePeg47" parent="Pegs" index="30" instance=ExtResource( 4 )] +position = Vector2( 136, 96 ) + +[node name="PurplePeg48" parent="Pegs" index="31" instance=ExtResource( 4 )] +position = Vector2( 248, 96 ) + +[node name="PurplePeg12" parent="Pegs" index="32" instance=ExtResource( 4 )] +position = Vector2( 240, 88 ) + +[node name="PurplePeg13" parent="Pegs" index="33" instance=ExtResource( 4 )] +position = Vector2( 240, 104 ) + +[node name="PurplePeg14" parent="Pegs" index="34" instance=ExtResource( 4 )] +position = Vector2( 144, 104 ) + +[node name="PurplePeg15" parent="Pegs" index="35" instance=ExtResource( 4 )] +position = Vector2( 144, 120 ) + +[node name="PurplePeg16" parent="Pegs" index="36" instance=ExtResource( 4 )] +position = Vector2( 240, 120 ) + +[node name="PurplePeg23" parent="Pegs" index="37" instance=ExtResource( 4 )] +position = Vector2( 240, 40 ) + +[node name="PurplePeg24" parent="Pegs" index="38" instance=ExtResource( 4 )] +position = Vector2( 256, 32 ) + +[node name="PurplePeg25" parent="Pegs" index="39" instance=ExtResource( 4 )] +position = Vector2( 272, 40 ) + +[node name="PurplePeg26" parent="Pegs" index="40" instance=ExtResource( 4 )] +position = Vector2( 256, 120 ) + +[node name="PurplePeg27" parent="Pegs" index="41" instance=ExtResource( 4 )] +position = Vector2( 264, 104 ) + +[node name="PurplePeg38" parent="Pegs" index="42" instance=ExtResource( 4 )] +position = Vector2( 272, 88 ) + +[node name="PurplePeg28" parent="Pegs" index="43" instance=ExtResource( 4 )] +position = Vector2( 280, 72 ) + +[node name="PurplePeg29" parent="Pegs" index="44" instance=ExtResource( 4 )] +position = Vector2( 280, 56 ) + +[node name="PurplePeg17" parent="Pegs" index="45" instance=ExtResource( 4 )] +position = Vector2( 232, 136 ) + +[node name="PurplePeg18" parent="Pegs" index="46" instance=ExtResource( 4 )] +position = Vector2( 152, 136 ) + +[node name="PurplePeg19" parent="Pegs" index="47" instance=ExtResource( 4 )] +position = Vector2( 168, 144 ) + +[node name="PurplePeg20" parent="Pegs" index="48" instance=ExtResource( 4 )] +position = Vector2( 216, 144 ) + +[node name="PurplePeg21" parent="Pegs" index="49" instance=ExtResource( 4 )] +position = Vector2( 200, 152 ) + +[node name="PurplePeg22" parent="Pegs" index="50" instance=ExtResource( 4 )] +position = Vector2( 184, 152 ) + +[node name="PurplePeg30" parent="Pegs" index="51" instance=ExtResource( 4 )] +position = Vector2( 128, 120 ) + +[node name="PurplePeg31" parent="Pegs" index="52" instance=ExtResource( 4 )] +position = Vector2( 120, 104 ) + +[node name="PurplePeg32" parent="Pegs" index="53" instance=ExtResource( 4 )] +position = Vector2( 112, 88 ) + +[node name="PurplePeg33" parent="Pegs" index="54" instance=ExtResource( 4 )] +position = Vector2( 104, 72 ) + +[node name="PurplePeg37" parent="Pegs" index="55" instance=ExtResource( 4 )] +position = Vector2( 104, 56 ) + +[node name="PurplePeg34" parent="Pegs" index="56" instance=ExtResource( 4 )] +position = Vector2( 112, 40 ) + +[node name="PurplePeg35" parent="Pegs" index="57" instance=ExtResource( 4 )] +position = Vector2( 128, 32 ) + +[node name="PurplePeg36" parent="Pegs" index="58" instance=ExtResource( 4 )] +position = Vector2( 144, 40 ) + +[node name="PurplePeg4" parent="Pegs" index="59" instance=ExtResource( 4 )] +position = Vector2( 176, 72 ) + +[node name="PurplePeg3" parent="Pegs" index="60" instance=ExtResource( 4 )] +position = Vector2( 216, 88 ) + +[node name="YellowPeg" parent="Pegs" index="61" instance=ExtResource( 3 )] +position = Vector2( 192, 64 ) + +[node name="YellowPeg2" parent="Pegs" index="62" instance=ExtResource( 3 )] +position = Vector2( 192, 80 ) + +[node name="YellowPeg4" parent="Pegs" index="63" instance=ExtResource( 3 )] +position = Vector2( 184, 96 ) + +[node name="YellowPeg5" parent="Pegs" index="64" instance=ExtResource( 3 )] +position = Vector2( 200, 96 ) + +[node name="YellowPeg6" parent="Pegs" index="65" instance=ExtResource( 3 )] +position = Vector2( 192, 112 ) + +[node name="YellowPeg3" parent="Pegs" index="66" instance=ExtResource( 3 )] +position = Vector2( 192, 144 ) + +[node name="PowerupCards" parent="." index="12"] +position = Vector2( -8, 16 ) + +[editable path="Ball"] diff --git a/Stats/GameStats.gd b/Stats/GameStats.gd index 6ad1843..087f87f 100644 --- a/Stats/GameStats.gd +++ b/Stats/GameStats.gd @@ -5,6 +5,9 @@ signal current_stage_changed(scene) signal multiplier_changed(value) signal score_changed(value) signal powerup_picked() +signal recount_pink() +signal pink_changed(value) +signal game_won() var unlock_points = 10 var max_balls = 3 @@ -48,7 +51,7 @@ func decide_game(): var Winscreen = preload("res://Menu/WinScreen.tscn") var winscreen = Winscreen.instance() main.add_child(winscreen) - + emit_signal("game_won") # game is lost elif (balls_left <= 0): @@ -98,3 +101,9 @@ func set_score_to(value): func pick_powerup(): powerup_screen_active = false emit_signal("powerup_picked") + +func recount_pink(): + pinks_left = 0; + emit_signal("recount_pink") + pinks_left -= 1 + emit_signal("pink_changed", pinks_left)