mirror of
https://git.kittycat.homes/zoe/pegchamp.git
synced 2024-08-15 03:15:39 +00:00
save system
This commit is contained in:
parent
ad8de1dbb7
commit
ffcccb8c2e
29 changed files with 286 additions and 77 deletions
|
@ -83,7 +83,7 @@ func spawn_trajectory_dots():
|
||||||
can_spawn_trajectory_dot = true
|
can_spawn_trajectory_dot = true
|
||||||
trajectoryTimer.start()
|
trajectoryTimer.start()
|
||||||
func reset_ball():
|
func reset_ball():
|
||||||
GameStats.multiplier = 1
|
GameStats.set_multiplier(1)
|
||||||
# delete the ball when the level is won, so it doesn't respawn
|
# delete the ball when the level is won, so it doesn't respawn
|
||||||
if GameStats.level_won:
|
if GameStats.level_won:
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
|
@ -98,5 +98,6 @@ anims/reset = SubResource( 2 )
|
||||||
|
|
||||||
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
|
||||||
stream = ExtResource( 5 )
|
stream = ExtResource( 5 )
|
||||||
|
bus = "SFX"
|
||||||
|
|
||||||
[connection signal="timeout" from="TrajectoryTimer" to="." method="_on_TrajectoryTimer_timeout"]
|
[connection signal="timeout" from="TrajectoryTimer" to="." method="_on_TrajectoryTimer_timeout"]
|
||||||
|
|
|
@ -93,5 +93,6 @@ texture = ExtResource( 7 )
|
||||||
stream = ExtResource( 8 )
|
stream = ExtResource( 8 )
|
||||||
volume_db = 4.0
|
volume_db = 4.0
|
||||||
autoplay = true
|
autoplay = true
|
||||||
|
bus = "SFX"
|
||||||
|
|
||||||
[connection signal="timeout" from="KillTimer" to="." method="_on_KillTimer_timeout"]
|
[connection signal="timeout" from="KillTimer" to="." method="_on_KillTimer_timeout"]
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
extends KinematicBody2D
|
extends KinematicBody2D
|
||||||
|
|
||||||
|
signal level_just_won
|
||||||
enum {IDLE, MOVEUP, MOVEDOWN}
|
enum {IDLE, MOVEUP, MOVEDOWN}
|
||||||
var state = IDLE
|
var state = IDLE
|
||||||
|
|
||||||
|
@ -8,6 +9,7 @@ func _on_Killzone_body_entered(body):
|
||||||
body.reset_ball()
|
body.reset_ball()
|
||||||
state = MOVEUP
|
state = MOVEUP
|
||||||
GameStats.add_balls(-1)
|
GameStats.add_balls(-1)
|
||||||
|
|
||||||
if body.has_method("explode"):
|
if body.has_method("explode"):
|
||||||
if (body.has_method("set_particle_direction")):
|
if (body.has_method("set_particle_direction")):
|
||||||
body.set_particle_direction(Vector2(0, -10))
|
body.set_particle_direction(Vector2(0, -10))
|
||||||
|
@ -28,4 +30,6 @@ func movedown():
|
||||||
func _on_ZoneDetection_area_entered(_area):
|
func _on_ZoneDetection_area_entered(_area):
|
||||||
if (state == MOVEUP):
|
if (state == MOVEUP):
|
||||||
state = MOVEDOWN
|
state = MOVEDOWN
|
||||||
|
if GameStats.level_won:
|
||||||
|
emit_signal("level_just_won")
|
||||||
else: state = IDLE
|
else: state = IDLE
|
||||||
|
|
35
HUD/HUD.tscn
35
HUD/HUD.tscn
|
@ -1,7 +1,10 @@
|
||||||
[gd_scene load_steps=3 format=2]
|
[gd_scene load_steps=6 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://Ball/sprite.png" type="Texture" id=1]
|
[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/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]
|
||||||
|
|
||||||
[node name="HUD" type="CanvasLayer"]
|
[node name="HUD" type="CanvasLayer"]
|
||||||
|
|
||||||
|
@ -19,3 +22,33 @@ centered = false
|
||||||
region_enabled = true
|
region_enabled = true
|
||||||
region_rect = Rect2( 0, 0, 16, 16 )
|
region_rect = Rect2( 0, 0, 16, 16 )
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
|
|
||||||
|
[node name="Multiplier" type="Label" parent="."]
|
||||||
|
margin_left = 336.0
|
||||||
|
margin_top = 176.0
|
||||||
|
margin_right = 376.0
|
||||||
|
margin_bottom = 190.0
|
||||||
|
grow_horizontal = 0
|
||||||
|
grow_vertical = 0
|
||||||
|
theme = ExtResource( 4 )
|
||||||
|
text = "x 1"
|
||||||
|
align = 2
|
||||||
|
script = ExtResource( 3 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="Score" type="Label" parent="."]
|
||||||
|
margin_left = 336.0
|
||||||
|
margin_top = 192.0
|
||||||
|
margin_right = 376.0
|
||||||
|
margin_bottom = 210.0
|
||||||
|
grow_horizontal = 0
|
||||||
|
grow_vertical = 0
|
||||||
|
theme = ExtResource( 4 )
|
||||||
|
text = "500"
|
||||||
|
align = 2
|
||||||
|
script = ExtResource( 5 )
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
1
HUD/HighScoreLabel.gd
Normal file
1
HUD/HighScoreLabel.gd
Normal file
|
@ -0,0 +1 @@
|
||||||
|
extends Label
|
7
HUD/Multiplier.gd
Normal file
7
HUD/Multiplier.gd
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
extends Label
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
var _connected = GameStats.connect("multiplier_changed", self, "update_text")
|
||||||
|
|
||||||
|
func update_text(value):
|
||||||
|
text = "x" + String(value)
|
8
HUD/Score.gd
Normal file
8
HUD/Score.gd
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
extends Label
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
update_text(GameStats.score)
|
||||||
|
var _connected = GameStats.connect("score_changed", self, "update_text")
|
||||||
|
|
||||||
|
func update_text(value):
|
||||||
|
text = String(value)
|
|
@ -13,3 +13,4 @@ bus = "SFX"
|
||||||
|
|
||||||
[node name="Select" type="AudioStreamPlayer" parent="."]
|
[node name="Select" type="AudioStreamPlayer" parent="."]
|
||||||
stream = ExtResource( 2 )
|
stream = ExtResource( 2 )
|
||||||
|
bus = "SFX"
|
||||||
|
|
|
@ -6,6 +6,7 @@ export var unlock_points_required = 0
|
||||||
func _ready():
|
func _ready():
|
||||||
if unlock_points_required > GameStats.unlock_points:
|
if unlock_points_required > GameStats.unlock_points:
|
||||||
disabled = true
|
disabled = true
|
||||||
|
text = String(unlock_points_required - GameStats.unlock_points) + " more points"
|
||||||
|
|
||||||
func _on_SceneSelectButton_pressed():
|
func _on_SceneSelectButton_pressed():
|
||||||
GameStats.set_current_scene(scene)
|
GameStats.set_current_scene(scene)
|
||||||
|
|
|
@ -7,8 +7,16 @@
|
||||||
[ext_resource path="res://Menu/Buttons/ButtonSFX.tscn" type="PackedScene" id=5]
|
[ext_resource path="res://Menu/Buttons/ButtonSFX.tscn" type="PackedScene" id=5]
|
||||||
|
|
||||||
[node name="PlayButton" type="TextureButton"]
|
[node name="PlayButton" type="TextureButton"]
|
||||||
margin_right = 40.0
|
anchor_left = 1.0
|
||||||
margin_bottom = 40.0
|
anchor_top = 1.0
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
margin_left = -384.0
|
||||||
|
margin_top = -216.0
|
||||||
|
margin_right = -352.0
|
||||||
|
margin_bottom = -184.0
|
||||||
|
size_flags_horizontal = 0
|
||||||
|
size_flags_vertical = 0
|
||||||
texture_normal = ExtResource( 3 )
|
texture_normal = ExtResource( 3 )
|
||||||
texture_pressed = ExtResource( 1 )
|
texture_pressed = ExtResource( 1 )
|
||||||
texture_hover = ExtResource( 2 )
|
texture_hover = ExtResource( 2 )
|
||||||
|
@ -21,5 +29,5 @@ __meta__ = {
|
||||||
|
|
||||||
[connection signal="focus_entered" from="." to="ButtonSFX" method="on_hover"]
|
[connection signal="focus_entered" from="." to="ButtonSFX" method="on_hover"]
|
||||||
[connection signal="mouse_entered" from="." to="ButtonSFX" method="on_hover"]
|
[connection signal="mouse_entered" from="." to="ButtonSFX" method="on_hover"]
|
||||||
[connection signal="pressed" from="." to="." method="_on_PlayButton_pressed"]
|
|
||||||
[connection signal="pressed" from="." to="ButtonSFX" method="on_select"]
|
[connection signal="pressed" from="." to="ButtonSFX" method="on_select"]
|
||||||
|
[connection signal="pressed" from="." to="." method="_on_PlayButton_pressed"]
|
||||||
|
|
|
@ -21,5 +21,5 @@ __meta__ = {
|
||||||
|
|
||||||
[connection signal="focus_entered" from="." to="ButtonSFX" method="on_hover"]
|
[connection signal="focus_entered" from="." to="ButtonSFX" method="on_hover"]
|
||||||
[connection signal="mouse_entered" from="." to="ButtonSFX" method="on_hover"]
|
[connection signal="mouse_entered" from="." to="ButtonSFX" method="on_hover"]
|
||||||
[connection signal="pressed" from="." to="ButtonSFX" method="on_select"]
|
|
||||||
[connection signal="pressed" from="." to="." method="_on_RestartButton_pressed"]
|
[connection signal="pressed" from="." to="." method="_on_RestartButton_pressed"]
|
||||||
|
[connection signal="pressed" from="." to="ButtonSFX" method="on_select"]
|
||||||
|
|
|
@ -1,12 +1,26 @@
|
||||||
extends VBoxContainer
|
extends PanelContainer
|
||||||
|
|
||||||
|
onready var stage_label = $CenterContainer/HBoxContainer/VBoxContainer/StageName
|
||||||
|
onready var score = $CenterContainer/HBoxContainer/VBoxContainer/ScoreLabel
|
||||||
|
onready var play = $CenterContainer/HBoxContainer/PlayButton
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
var _game_stats = GameStats.connect("current_stage_changed", self, "update_info")
|
var _game_stats = GameStats.connect("current_stage_changed", self, "update_info")
|
||||||
|
|
||||||
func update_info(stage):
|
func update_info(stage):
|
||||||
$HBoxContainer/PlayButton.disabled = false
|
play.disabled = false
|
||||||
var Stage = load(stage)
|
var Stage = load(stage)
|
||||||
stage = Stage.instance()
|
stage = Stage.instance()
|
||||||
|
|
||||||
$ScoreLabel.text = stage.stage_name
|
score.text = String(stage.high_score)
|
||||||
$HBoxContainer/PlayButton.visible = true
|
play.visible = true
|
||||||
|
|
||||||
|
var filename = "user://" + stage.stage_name + ".dat"
|
||||||
|
var file = File.new()
|
||||||
|
if file.file_exists(filename):
|
||||||
|
var err = file.open(filename, File.READ)
|
||||||
|
if err == OK:
|
||||||
|
var data = file.get_var()
|
||||||
|
file.close()
|
||||||
|
score.text = String(data.high_score)
|
||||||
|
stage_label.text = String(stage.stage_name)
|
||||||
|
|
|
@ -1,50 +1,65 @@
|
||||||
[gd_scene load_steps=3 format=2]
|
[gd_scene load_steps=5 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://Menu/LevelInfo.gd" type="Script" id=1]
|
[ext_resource path="res://Menu/LevelInfo.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://Menu/Theme.tres" type="Theme" id=2]
|
||||||
[ext_resource path="res://Menu/Buttons/PlayButton.tscn" type="PackedScene" id=6]
|
[ext_resource path="res://Menu/Buttons/PlayButton.tscn" type="PackedScene" id=6]
|
||||||
|
|
||||||
[node name="LevelInfo" type="VBoxContainer"]
|
[sub_resource type="StyleBoxFlat" id=1]
|
||||||
margin_left = 3.0
|
bg_color = Color( 0.847059, 0.74902, 0.847059, 1 )
|
||||||
margin_right = 150.0
|
|
||||||
margin_bottom = 165.0
|
[node name="LevelInfo" type="PanelContainer"]
|
||||||
alignment = 2
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
theme = ExtResource( 2 )
|
||||||
|
custom_styles/panel = SubResource( 1 )
|
||||||
script = ExtResource( 1 )
|
script = ExtResource( 1 )
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
"_edit_use_anchors_": false
|
"_edit_use_anchors_": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[node name="ScoreLabel" type="Label" parent="."]
|
[node name="CenterContainer" type="CenterContainer" parent="."]
|
||||||
margin_top = 115.0
|
margin_right = 384.0
|
||||||
margin_right = 147.0
|
margin_bottom = 216.0
|
||||||
margin_bottom = 129.0
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer"]
|
||||||
|
margin_left = 133.0
|
||||||
|
margin_top = 88.0
|
||||||
|
margin_right = 250.0
|
||||||
|
margin_bottom = 128.0
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/HBoxContainer"]
|
||||||
|
margin_right = 117.0
|
||||||
|
margin_bottom = 40.0
|
||||||
|
alignment = 1
|
||||||
|
|
||||||
|
[node name="ScoreLabel" type="Label" parent="CenterContainer/HBoxContainer/VBoxContainer"]
|
||||||
|
margin_right = 117.0
|
||||||
|
margin_bottom = 18.0
|
||||||
|
theme = ExtResource( 2 )
|
||||||
|
text = "high score"
|
||||||
|
align = 2
|
||||||
|
valign = 3
|
||||||
|
__meta__ = {
|
||||||
|
"_edit_use_anchors_": false
|
||||||
|
}
|
||||||
|
|
||||||
|
[node name="StageName" type="Label" parent="CenterContainer/HBoxContainer/VBoxContainer"]
|
||||||
|
margin_top = 22.0
|
||||||
|
margin_right = 117.0
|
||||||
|
margin_bottom = 40.0
|
||||||
|
theme = ExtResource( 2 )
|
||||||
|
text = "select stage"
|
||||||
align = 2
|
align = 2
|
||||||
valign = 3
|
valign = 3
|
||||||
|
|
||||||
[node name="StageName" type="Label" parent="."]
|
[node name="PlayButton" parent="CenterContainer/HBoxContainer" instance=ExtResource( 6 )]
|
||||||
margin_top = 133.0
|
|
||||||
margin_right = 147.0
|
|
||||||
margin_bottom = 147.0
|
|
||||||
text = "..."
|
|
||||||
align = 2
|
|
||||||
valign = 3
|
|
||||||
|
|
||||||
[node name="HBoxContainer" type="HBoxContainer" parent="."]
|
|
||||||
margin_top = 151.0
|
|
||||||
margin_right = 147.0
|
|
||||||
margin_bottom = 165.0
|
|
||||||
alignment = 2
|
|
||||||
|
|
||||||
[node name="GoodLuck!!!" type="Label" parent="HBoxContainer"]
|
|
||||||
margin_left = 135.0
|
|
||||||
margin_right = 147.0
|
|
||||||
margin_bottom = 14.0
|
|
||||||
text = "..."
|
|
||||||
align = 2
|
|
||||||
valign = 3
|
|
||||||
|
|
||||||
[node name="PlayButton" parent="HBoxContainer" instance=ExtResource( 6 )]
|
|
||||||
visible = false
|
visible = false
|
||||||
margin_left = 94.0
|
anchor_left = 0.0
|
||||||
margin_right = 126.0
|
anchor_top = 0.0
|
||||||
|
anchor_right = 0.0
|
||||||
|
anchor_bottom = 0.0
|
||||||
|
margin_left = 121.0
|
||||||
|
margin_top = 0.0
|
||||||
|
margin_right = 153.0
|
||||||
margin_bottom = 32.0
|
margin_bottom = 32.0
|
||||||
disabled = true
|
|
||||||
|
|
|
@ -105,7 +105,6 @@ __meta__ = {
|
||||||
[node name="LevelInfo" parent="Control/TabContainer/Levels/HBoxContainer" instance=ExtResource( 7 )]
|
[node name="LevelInfo" parent="Control/TabContainer/Levels/HBoxContainer" instance=ExtResource( 7 )]
|
||||||
margin_left = 157.0
|
margin_left = 157.0
|
||||||
margin_right = 172.0
|
margin_right = 172.0
|
||||||
alignment = 1
|
|
||||||
|
|
||||||
[node name="LevelList" type="ScrollContainer" parent="Control/TabContainer/Levels/HBoxContainer"]
|
[node name="LevelList" type="ScrollContainer" parent="Control/TabContainer/Levels/HBoxContainer"]
|
||||||
margin_left = 176.0
|
margin_left = 176.0
|
||||||
|
|
|
@ -54,19 +54,19 @@ anchor_bottom = 0.0
|
||||||
margin_right = 32.0
|
margin_right = 32.0
|
||||||
margin_bottom = 32.0
|
margin_bottom = 32.0
|
||||||
|
|
||||||
[node name="LevelSelectIconButton" parent="Pause/PanelContainer/HBoxContainer/VBoxContainer" instance=ExtResource( 6 )]
|
[node name="RestartButton" parent="Pause/PanelContainer/HBoxContainer/VBoxContainer" instance=ExtResource( 1 )]
|
||||||
margin_left = 36.0
|
margin_left = 36.0
|
||||||
margin_right = 68.0
|
margin_right = 68.0
|
||||||
margin_bottom = 32.0
|
margin_bottom = 32.0
|
||||||
|
|
||||||
|
[node name="LevelSelectIconButton" parent="Pause/PanelContainer/HBoxContainer/VBoxContainer" instance=ExtResource( 6 )]
|
||||||
|
margin_left = 72.0
|
||||||
|
margin_right = 104.0
|
||||||
|
margin_bottom = 32.0
|
||||||
texture_normal = ExtResource( 3 )
|
texture_normal = ExtResource( 3 )
|
||||||
texture_pressed = ExtResource( 5 )
|
texture_pressed = ExtResource( 5 )
|
||||||
texture_hover = ExtResource( 4 )
|
texture_hover = ExtResource( 4 )
|
||||||
|
|
||||||
[node name="RestartButton" parent="Pause/PanelContainer/HBoxContainer/VBoxContainer" instance=ExtResource( 1 )]
|
|
||||||
margin_left = 72.0
|
|
||||||
margin_right = 104.0
|
|
||||||
margin_bottom = 32.0
|
|
||||||
|
|
||||||
[node name="Resume" type="TextureButton" parent="Pause/PanelContainer/HBoxContainer/VBoxContainer"]
|
[node name="Resume" type="TextureButton" parent="Pause/PanelContainer/HBoxContainer/VBoxContainer"]
|
||||||
margin_left = 108.0
|
margin_left = 108.0
|
||||||
margin_right = 140.0
|
margin_right = 140.0
|
||||||
|
@ -93,8 +93,8 @@ custom_icons/grabber_highlight = ExtResource( 14 )
|
||||||
custom_icons/grabber = ExtResource( 13 )
|
custom_icons/grabber = ExtResource( 13 )
|
||||||
bus_channel = "Music"
|
bus_channel = "Music"
|
||||||
|
|
||||||
[connection signal="pressed" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/LevelSelectIconButton" to="Pause" method="_on_pause_button_pressed"]
|
|
||||||
[connection signal="pressed" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/RestartButton" to="Pause" method="_on_pause_button_pressed"]
|
[connection signal="pressed" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/RestartButton" to="Pause" method="_on_pause_button_pressed"]
|
||||||
|
[connection signal="pressed" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/LevelSelectIconButton" to="Pause" method="_on_pause_button_pressed"]
|
||||||
[connection signal="focus_entered" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume" to="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume/ButtonSFX" method="on_hover"]
|
[connection signal="focus_entered" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume" to="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume/ButtonSFX" method="on_hover"]
|
||||||
[connection signal="mouse_entered" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume" to="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume/ButtonSFX" method="on_hover"]
|
[connection signal="mouse_entered" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume" to="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume/ButtonSFX" method="on_hover"]
|
||||||
[connection signal="pressed" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume" to="Pause" method="_on_pause_button_pressed"]
|
[connection signal="pressed" from="Pause/PanelContainer/HBoxContainer/VBoxContainer/Resume" to="Pause" method="_on_pause_button_pressed"]
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_scene load_steps=10 format=2]
|
[gd_scene load_steps=11 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://Menu/MenuPage.tscn" type="PackedScene" id=1]
|
[ext_resource path="res://Menu/MenuPage.tscn" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://Menu/Buttons/RestartButton.tscn" type="PackedScene" id=2]
|
[ext_resource path="res://Menu/Buttons/RestartButton.tscn" type="PackedScene" id=2]
|
||||||
|
@ -8,6 +8,7 @@
|
||||||
[ext_resource path="res://Menu/Icons/Home/homeIcon1.png" type="Texture" id=6]
|
[ext_resource path="res://Menu/Icons/Home/homeIcon1.png" type="Texture" id=6]
|
||||||
[ext_resource path="res://Menu/Icons/Home/homeIcon2.png" type="Texture" id=7]
|
[ext_resource path="res://Menu/Icons/Home/homeIcon2.png" type="Texture" id=7]
|
||||||
[ext_resource path="res://Menu/Icons/Home/homeIcon3.png" type="Texture" id=8]
|
[ext_resource path="res://Menu/Icons/Home/homeIcon3.png" type="Texture" id=8]
|
||||||
|
[ext_resource path="res://Menu/WinScreenScoreLabel.gd" type="Script" id=9]
|
||||||
|
|
||||||
[sub_resource type="Animation" id=1]
|
[sub_resource type="Animation" id=1]
|
||||||
resource_name = "win"
|
resource_name = "win"
|
||||||
|
@ -40,8 +41,8 @@ script = ExtResource( 4 )
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="GridContainer" parent="Control/Panel/CenterContainer" index="0"]
|
[node name="GridContainer" parent="Control/Panel/CenterContainer" index="0"]
|
||||||
margin_top = 55.0
|
margin_top = 44.0
|
||||||
margin_bottom = 109.0
|
margin_bottom = 120.0
|
||||||
|
|
||||||
[node name="ButtonRow" parent="Control/Panel/CenterContainer/GridContainer" index="1"]
|
[node name="ButtonRow" parent="Control/Panel/CenterContainer/GridContainer" index="1"]
|
||||||
margin_bottom = 54.0
|
margin_bottom = 54.0
|
||||||
|
@ -59,6 +60,14 @@ texture_normal = ExtResource( 6 )
|
||||||
texture_pressed = ExtResource( 8 )
|
texture_pressed = ExtResource( 8 )
|
||||||
texture_hover = ExtResource( 7 )
|
texture_hover = ExtResource( 7 )
|
||||||
|
|
||||||
|
[node name="WinScreenScoreLabel" type="Label" parent="Control/Panel/CenterContainer/GridContainer" index="2"]
|
||||||
|
margin_top = 58.0
|
||||||
|
margin_right = 86.0
|
||||||
|
margin_bottom = 76.0
|
||||||
|
text = "700"
|
||||||
|
align = 1
|
||||||
|
script = ExtResource( 9 )
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="1"]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="1"]
|
||||||
anims/win = SubResource( 1 )
|
anims/win = SubResource( 1 )
|
||||||
|
|
||||||
|
|
8
Menu/WinScreenScoreLabel.gd
Normal file
8
Menu/WinScreenScoreLabel.gd
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
extends Label
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
GameStats.connect("score_changed", self, "update_score_text")
|
||||||
|
text = String(GameStats.score)
|
||||||
|
|
||||||
|
func update_score_text(value):
|
||||||
|
text = String(value)
|
|
@ -49,5 +49,6 @@ shape = SubResource( 2 )
|
||||||
anims/spawn = SubResource( 3 )
|
anims/spawn = SubResource( 3 )
|
||||||
|
|
||||||
[node name="ScoreCounter" parent="." instance=ExtResource( 5 )]
|
[node name="ScoreCounter" parent="." instance=ExtResource( 5 )]
|
||||||
|
base_multiplier = 0
|
||||||
|
|
||||||
[connection signal="timeout" from="GraceTimer" to="." method="_on_GraceTimer_timeout"]
|
[connection signal="timeout" from="GraceTimer" to="." method="_on_GraceTimer_timeout"]
|
||||||
|
|
|
@ -45,5 +45,6 @@ script = ExtResource( 5 )
|
||||||
[node name="GraceTimer" parent="." instance=ExtResource( 3 )]
|
[node name="GraceTimer" parent="." instance=ExtResource( 3 )]
|
||||||
|
|
||||||
[node name="ScoreCounter" parent="." instance=ExtResource( 7 )]
|
[node name="ScoreCounter" parent="." instance=ExtResource( 7 )]
|
||||||
|
base_multiplier = 0
|
||||||
|
|
||||||
[connection signal="timeout" from="GraceTimer" to="." method="_on_GraceTimer_timeout"]
|
[connection signal="timeout" from="GraceTimer" to="." method="_on_GraceTimer_timeout"]
|
||||||
|
|
|
@ -15,13 +15,11 @@ func make_green():
|
||||||
# get the main scene of current peg and add new peg to it
|
# get the main scene of current peg and add new peg to it
|
||||||
var main = get_tree().current_scene
|
var main = get_tree().current_scene
|
||||||
main.add_child(green_peg)
|
main.add_child(green_peg)
|
||||||
|
|
||||||
# add score
|
# add score
|
||||||
$ScoreCounter.trigger()
|
$ScoreCounter.trigger()
|
||||||
|
|
||||||
#finally delete the old peg
|
#finally delete the old peg
|
||||||
GameStats.pinks_left -= 1
|
GameStats.pinks_left -= 1
|
||||||
GameStats.add_to_multiplier()
|
|
||||||
win_level()
|
win_level()
|
||||||
Engine.time_scale = 1
|
Engine.time_scale = 1
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
|
@ -11,7 +11,6 @@ func make_green():
|
||||||
$ScoreCounter.trigger()
|
$ScoreCounter.trigger()
|
||||||
|
|
||||||
main.add_child(green_bar)
|
main.add_child(green_bar)
|
||||||
GameStats.add_to_multiplier()
|
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
||||||
func bouncy():
|
func bouncy():
|
||||||
|
|
|
@ -18,8 +18,6 @@ func make_green():
|
||||||
var main = get_tree().current_scene
|
var main = get_tree().current_scene
|
||||||
main.add_child(green_peg)
|
main.add_child(green_peg)
|
||||||
|
|
||||||
# increase multiplyier
|
|
||||||
GameStats.add_to_multiplier()
|
|
||||||
|
|
||||||
#finally delete the old peg
|
#finally delete the old peg
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
|
@ -1,17 +1,16 @@
|
||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
export var base_score = 1
|
export var base_score = 1
|
||||||
|
export var base_multiplier = 1
|
||||||
|
|
||||||
func trigger():
|
func trigger():
|
||||||
add_score()
|
add_score()
|
||||||
|
add_multiplier()
|
||||||
|
|
||||||
func add_score():
|
func add_score():
|
||||||
var score = base_score * GameStats.multiplier
|
var score = base_score * GameStats.multiplier
|
||||||
GameStats.score += score
|
|
||||||
|
|
||||||
#Todo remove
|
|
||||||
print(GameStats.score)
|
|
||||||
|
|
||||||
|
GameStats.set_score_to(GameStats.score + base_score * GameStats.multiplier)
|
||||||
|
|
||||||
var main = get_tree().current_scene
|
var main = get_tree().current_scene
|
||||||
var Scorelabel = preload("res://Pegs/ScoreLabel.tscn")
|
var Scorelabel = preload("res://Pegs/ScoreLabel.tscn")
|
||||||
|
@ -20,6 +19,9 @@ func add_score():
|
||||||
scorelabel.global_position = global_position
|
scorelabel.global_position = global_position
|
||||||
scorelabel.trigger(String(score))
|
scorelabel.trigger(String(score))
|
||||||
|
|
||||||
|
func add_multiplier():
|
||||||
|
GameStats.add_to_multiplier(base_multiplier)
|
||||||
|
|
||||||
func delete():
|
func delete():
|
||||||
queue_free()
|
queue_free()
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,7 @@ tracks/1/keys = {
|
||||||
|
|
||||||
[node name="ScoreLabel" type="Node2D"]
|
[node name="ScoreLabel" type="Node2D"]
|
||||||
z_index = 1000
|
z_index = 1000
|
||||||
|
z_as_relative = false
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
|
|
||||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
@ -50,7 +51,7 @@ size_flags_horizontal = 3
|
||||||
size_flags_vertical = 5
|
size_flags_vertical = 5
|
||||||
theme = ExtResource( 1 )
|
theme = ExtResource( 1 )
|
||||||
text = "69"
|
text = "69"
|
||||||
max_lines_visible = 1
|
align = 1
|
||||||
__meta__ = {
|
__meta__ = {
|
||||||
"_edit_use_anchors_": false
|
"_edit_use_anchors_": false
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,14 @@
|
||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
export var stage_name = "test stage"
|
export var stage_name = "test stage"
|
||||||
|
export var high_score = 0
|
||||||
|
export var already_beaten = false
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
load_level()
|
||||||
|
$Killzone.connect("level_just_won", self, "save_level")
|
||||||
|
GameStats.multiplier = 1
|
||||||
|
print(high_score)
|
||||||
|
|
||||||
func _physics_process(_delta):
|
func _physics_process(_delta):
|
||||||
fast_forward()
|
fast_forward()
|
||||||
|
@ -10,3 +18,46 @@ func fast_forward():
|
||||||
Engine.time_scale = 3
|
Engine.time_scale = 3
|
||||||
if (Input.is_action_just_released("fast_forward")):
|
if (Input.is_action_just_released("fast_forward")):
|
||||||
Engine.time_scale = 1
|
Engine.time_scale = 1
|
||||||
|
|
||||||
|
func load_level():
|
||||||
|
var filename = give_filename()
|
||||||
|
var file = File.new()
|
||||||
|
if file.file_exists(filename):
|
||||||
|
var err = file.open(filename, File.READ)
|
||||||
|
if err == OK:
|
||||||
|
var data = file.get_var()
|
||||||
|
file.close()
|
||||||
|
load_data(data)
|
||||||
|
|
||||||
|
func load_data(data):
|
||||||
|
already_beaten = data.already_beaten
|
||||||
|
high_score = data.high_score
|
||||||
|
|
||||||
|
|
||||||
|
func save_level():
|
||||||
|
print("saving game")
|
||||||
|
if !already_beaten:
|
||||||
|
GameStats.unlock_points += 10
|
||||||
|
already_beaten = true
|
||||||
|
else: GameStats.unlock_points += 1
|
||||||
|
|
||||||
|
|
||||||
|
if GameStats.score > high_score:
|
||||||
|
print("New High score!")
|
||||||
|
high_score = GameStats.score
|
||||||
|
|
||||||
|
var data = {
|
||||||
|
"high_score" : high_score,
|
||||||
|
"already_beaten" : already_beaten
|
||||||
|
}
|
||||||
|
var file = File.new()
|
||||||
|
var err = file.open(give_filename(), File.WRITE)
|
||||||
|
if err == OK:
|
||||||
|
file.store_var(data)
|
||||||
|
file.close()
|
||||||
|
else: print("something went wrong while saving your high scores! please check file permissions!")
|
||||||
|
Saves.save_game()
|
||||||
|
|
||||||
|
func give_filename():
|
||||||
|
var save_path = "user://" + String(stage_name) + ".dat"
|
||||||
|
return save_path
|
||||||
|
|
|
@ -2,6 +2,8 @@ extends Node
|
||||||
|
|
||||||
signal balls_changed()
|
signal balls_changed()
|
||||||
signal current_stage_changed(scene)
|
signal current_stage_changed(scene)
|
||||||
|
signal multiplier_changed(value)
|
||||||
|
signal score_changed(value)
|
||||||
|
|
||||||
var unlock_points = 10
|
var unlock_points = 10
|
||||||
var max_balls = 8
|
var max_balls = 8
|
||||||
|
@ -37,19 +39,33 @@ func restart_level():
|
||||||
reset_board()
|
reset_board()
|
||||||
|
|
||||||
func reset_board():
|
func reset_board():
|
||||||
|
multiplier = 1
|
||||||
|
score = 0
|
||||||
balls_left = max_balls
|
balls_left = max_balls
|
||||||
pinks_left = 0
|
pinks_left = 0
|
||||||
level_won = false
|
level_won = false
|
||||||
multiplier = 1
|
|
||||||
score = 0
|
|
||||||
|
|
||||||
func set_current_scene(stage):
|
func set_current_scene(stage):
|
||||||
current_stage = stage
|
current_stage = stage
|
||||||
emit_signal("current_stage_changed", current_stage)
|
emit_signal("current_stage_changed", current_stage)
|
||||||
|
|
||||||
func add_to_multiplier():
|
func add_to_multiplier(value):
|
||||||
|
if value + GameStats.multiplier > GameStats.multiplier:
|
||||||
var SFXPlayer = load("res://SFX/SFXPlayer.tscn")
|
var SFXPlayer = load("res://SFX/SFXPlayer.tscn")
|
||||||
var sfx_player = SFXPlayer.instance()
|
var sfx_player = SFXPlayer.instance()
|
||||||
var main = get_tree().current_scene
|
var main = get_tree().current_scene
|
||||||
main.add_child(sfx_player)
|
main.add_child(sfx_player)
|
||||||
multiplier += 1
|
|
||||||
|
multiplier += value
|
||||||
|
emit_signal("multiplier_changed", multiplier)
|
||||||
|
|
||||||
|
func set_multiplier(value):
|
||||||
|
multiplier = value
|
||||||
|
emit_signal("multiplier_changed", multiplier)
|
||||||
|
|
||||||
|
|
||||||
|
func set_score_to(value):
|
||||||
|
score = value
|
||||||
|
emit_signal("score_changed", score)
|
||||||
|
|
||||||
|
|
31
Stats/Saves.gd
Normal file
31
Stats/Saves.gd
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
var save_path = "user://save.dat"
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
load_game()
|
||||||
|
|
||||||
|
func save_game():
|
||||||
|
var data = {
|
||||||
|
"unlock_points" : GameStats.unlock_points
|
||||||
|
}
|
||||||
|
|
||||||
|
print(data)
|
||||||
|
|
||||||
|
var file = File.new()
|
||||||
|
var err = file.open(save_path, File.WRITE)
|
||||||
|
if err == OK:
|
||||||
|
file.store_var(data)
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
func load_game():
|
||||||
|
var file = File.new()
|
||||||
|
if file.file_exists(save_path):
|
||||||
|
var err = file.open(save_path, File.READ)
|
||||||
|
if err == OK:
|
||||||
|
var data = file.get_var()
|
||||||
|
file.close()
|
||||||
|
load_unlock_points(data)
|
||||||
|
|
||||||
|
func load_unlock_points(data):
|
||||||
|
GameStats.unlock_points = data.unlock_points
|
|
@ -22,6 +22,7 @@ config/icon="res://icon.png"
|
||||||
|
|
||||||
GameStats="*res://Stats/GameStats.gd"
|
GameStats="*res://Stats/GameStats.gd"
|
||||||
Music="*res://Music/Music.tscn"
|
Music="*res://Music/Music.tscn"
|
||||||
|
Saves="*res://Stats/Saves.gd"
|
||||||
|
|
||||||
[display]
|
[display]
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue