From ccb013d93c5570638e3ec86789fb7e2563a3d49e Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Tue, 14 Mar 2023 14:51:59 +0100 Subject: [PATCH] Global Achievement State --- project.godot | 4 ++++ src/Actors/Actor.gd | 4 ++-- src/Actors/Enemies/Beings/BoundFrog.gd | 2 +- src/Actors/Enemies/Beings/Flyer.tscn | 2 +- src/Autoload/GlobalState.gd | 6 +++++ src/Autoload/GlobalState.tscn | 6 +++++ src/Contraptions/Portal/Portal.gd | 23 +++++++++++++++++++ src/Levels/01 Level.tscn | 15 ++++-------- src/Levels/02 Level.tscn | 6 ++--- src/Levels/03 Level.tscn | 8 +++---- src/Levels/Enemy Test Level.tscn | 2 +- src/Levels/Flyer Test Level.tscn | 2 +- src/Levels/Froggy Test Level.tscn | 4 ++-- src/Levels/Grass Test Level.tscn | 6 ++--- src/StateMachines/StateMachine.gd | 4 ++-- src/UserInterface/Buttons/StatsLabel.gd | 19 +++++++++++++-- src/UserInterface/Buttons/StatsLabel.tscn | 2 +- src/UserInterface/Screens/HUD.gd | 15 +++++++++--- src/UserInterface/Screens/LevelEndScreen.tscn | 12 +++++----- src/UserInterface/Screens/MainScreen.tscn | 12 ++++++++-- src/Utilities/LevelState.gd | 2 +- src/Utilities/Physic/PhysicsFunc.gd | 2 +- 22 files changed, 111 insertions(+), 47 deletions(-) create mode 100644 src/Autoload/GlobalState.gd create mode 100644 src/Autoload/GlobalState.tscn diff --git a/project.godot b/project.godot index 75019e1..d3ad639 100644 --- a/project.godot +++ b/project.godot @@ -42,6 +42,10 @@ config/name="Blobby" run/main_scene="res://src/UserInterface/Screens/MainScreen.tscn" config/icon="res://icon.png" +[autoload] + +GlobalState="*res://src/Autoload/GlobalState.tscn" + [debug] settings/fps/force_fps=144 diff --git a/src/Actors/Actor.gd b/src/Actors/Actor.gd index 0235f2e..fab6bf6 100644 --- a/src/Actors/Actor.gd +++ b/src/Actors/Actor.gd @@ -1,8 +1,8 @@ extends KinematicBody2D class_name Actor -onready var levelState := get_tree().root.get_child(0).get_node("%LevelState") -onready var signalManager := get_tree().root.get_child(0).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") +onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") const PhysicsConst = preload("res://src/Utilities/Physic/PhysicsConst.gd") diff --git a/src/Actors/Enemies/Beings/BoundFrog.gd b/src/Actors/Enemies/Beings/BoundFrog.gd index 36915d6..979a1c0 100644 --- a/src/Actors/Enemies/Beings/BoundFrog.gd +++ b/src/Actors/Enemies/Beings/BoundFrog.gd @@ -9,7 +9,7 @@ var RopeAnchor = preload("res://src/Contraptions/Rope/RopeAnchor.tscn") var rope var is_first_signal = true -func _on_LevelTemplate_ready() -> void: +func _on_Level_ready() -> void: rope = Rope.instance() # For some reason the rope only can be instanced in the parent scene # The scene also has to be ready beforehand diff --git a/src/Actors/Enemies/Beings/Flyer.tscn b/src/Actors/Enemies/Beings/Flyer.tscn index 69e9360..bf8ab2f 100644 --- a/src/Actors/Enemies/Beings/Flyer.tscn +++ b/src/Actors/Enemies/Beings/Flyer.tscn @@ -194,7 +194,7 @@ extents = Vector2( 18.2143, 14.3338 ) [node name="Flyer" type="KinematicBody2D" groups=["frogfood", "harmful"]] collision_layer = 258 -collision_mask = 9 +collision_mask = 25 script = ExtResource( 1 ) vision_distance = 8.0 blindspot_angle = 30 diff --git a/src/Autoload/GlobalState.gd b/src/Autoload/GlobalState.gd new file mode 100644 index 0000000..f2461ce --- /dev/null +++ b/src/Autoload/GlobalState.gd @@ -0,0 +1,6 @@ +extends Node + +var progress_dict := {} setget set_progress + +func set_progress(value) -> void: + progress_dict = value diff --git a/src/Autoload/GlobalState.tscn b/src/Autoload/GlobalState.tscn new file mode 100644 index 0000000..f107903 --- /dev/null +++ b/src/Autoload/GlobalState.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://src/Autoload/GlobalState.gd" type="Script" id=1] + +[node name="GlobalState" type="Node"] +script = ExtResource( 1 ) diff --git a/src/Contraptions/Portal/Portal.gd b/src/Contraptions/Portal/Portal.gd index ff22d12..4b67cd6 100644 --- a/src/Contraptions/Portal/Portal.gd +++ b/src/Contraptions/Portal/Portal.gd @@ -2,6 +2,8 @@ tool extends Area2D onready var anim_player: AnimationPlayer = $AnimationPlayer +onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") +onready var levelName := get_tree().get_current_scene().get_name() export var next_scene: PackedScene @@ -9,6 +11,26 @@ export var next_scene: PackedScene func _get_configuration_warning() -> String: return "The next scene property can't be empty" if not next_scene else "" +func update_level_achievements() -> void: + var progress_dict : Dictionary = GlobalState.progress_dict + var levelProgress : Dictionary = {} + + levelProgress["currency"] = levelState.currency + levelProgress["kills"] = levelState.kills + levelProgress["deaths"] = levelState.deaths + levelProgress["frees"] = levelState.frees + + progress_dict[levelName] = levelProgress + + # if !progress_dict.has(levelName): + # progress_dict[levelName] = levelProgress + # else: + # progress_dict[levelName]["currency"] = progress_dict[levelName]["currency"] + levelState.currency + # progress_dict[levelName]["kills"] = progress_dict[levelName]["kills"] + levelState.kills + # progress_dict[levelName]["deaths"] = progress_dict[levelName]["deaths"] + levelState.deaths + # progress_dict[levelName]["frees"] = progress_dict[levelName]["frees"] + levelState.frees + + GlobalState.set_progress(progress_dict) func teleport() -> void: anim_player.play("fade_in") @@ -17,4 +39,5 @@ func teleport() -> void: func _on_body_entered(_body: Node) -> void: + update_level_achievements() teleport() diff --git a/src/Levels/01 Level.tscn b/src/Levels/01 Level.tscn index 25a28de..304d32e 100644 --- a/src/Levels/01 Level.tscn +++ b/src/Levels/01 Level.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=14 format=2] +[gd_scene load_steps=13 format=2] [ext_resource path="res://src/Environment/AlienShipTileSet.tres" type="TileSet" id=1] [ext_resource path="res://src/Actors/Blobby/Blobby.tscn" type="PackedScene" id=2] @@ -9,13 +9,12 @@ [ext_resource path="res://src/UserInterface/UserInterface.tscn" type="PackedScene" id=7] [ext_resource path="res://src/Utilities/SignalManager.tscn" type="PackedScene" id=8] [ext_resource path="res://src/Utilities/LevelState.tscn" type="PackedScene" id=9] -[ext_resource path="res://src/ObstacleObjects/Mine.tscn" type="PackedScene" id=10] [ext_resource path="res://src/Actors/BlobbyCam.tscn" type="PackedScene" id=12] [ext_resource path="res://src/Environment/ShaderGrass.tscn" type="PackedScene" id=13] [sub_resource type="AnimationNodeStateMachinePlayback" id=4] -[node name="LevelTemplate" type="Node2D"] +[node name="01 Level" type="Node2D"] __meta__ = { "_edit_horizontal_guides_": [ 464.0 ], "_edit_vertical_guides_": [ 2880.0 ] @@ -35,10 +34,10 @@ wait_time = 20.0 drag_margin_bottom = 0.3 [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 3 +frame = 10 [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 7 +frame = 0 [node name="Blobby" parent="." instance=ExtResource( 2 )] unique_name_in_owner = true @@ -142,12 +141,6 @@ rotation = 1.57079 position = Vector2( 1488, -120 ) next_scene = ExtResource( 4 ) -[node name="Mine2" parent="." instance=ExtResource( 10 )] -position = Vector2( 20, -9 ) - -[node name="Mine" parent="." instance=ExtResource( 10 )] -position = Vector2( 21, -27 ) - [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [editable path="UserInterface"] diff --git a/src/Levels/02 Level.tscn b/src/Levels/02 Level.tscn index 42da6a2..e397e5d 100644 --- a/src/Levels/02 Level.tscn +++ b/src/Levels/02 Level.tscn @@ -68,7 +68,7 @@ tracks/0/keys = { "values": [ Vector2( 0, 0 ), Vector2( -96, 0 ) ] } -[node name="LevelTemplate" type="Node2D"] +[node name="02 Level" type="Node2D"] __meta__ = { "_edit_horizontal_guides_": [ 464.0 ], "_edit_vertical_guides_": [ 2880.0 ] @@ -87,10 +87,10 @@ wait_time = 20.0 [node name="BlobbyCam" parent="." instance=ExtResource( 12 )] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 0 +frame = 8 [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 5 +frame = 13 [node name="Blobby" parent="." instance=ExtResource( 2 )] unique_name_in_owner = true diff --git a/src/Levels/03 Level.tscn b/src/Levels/03 Level.tscn index 7b3c2e5..9391446 100644 --- a/src/Levels/03 Level.tscn +++ b/src/Levels/03 Level.tscn @@ -67,7 +67,7 @@ animations = [ { [sub_resource type="AnimationNodeStateMachinePlayback" id=6] -[node name="LevelTemplate" type="Node2D"] +[node name="03 Level" type="Node2D"] __meta__ = { "_edit_horizontal_guides_": [ 464.0 ], "_edit_vertical_guides_": [ 2880.0 ] @@ -139,7 +139,7 @@ shape = SubResource( 3 ) position = Vector2( 0, 1.5 ) z_index = -1 frames = SubResource( 5 ) -frame = 20 +frame = 7 playing = true [node name="Portal" parent="." instance=ExtResource( 42 )] @@ -161,7 +161,7 @@ tile_data = PoolIntArray( -1, 1610612751, 0, -65536, 1610612746, 0, -65535, 1610 tile_data = PoolIntArray( 851970, 1, 0, 851971, 0, 0, 851973, 0, 0, 851975, 2, 0 ) [node name="Flyer" parent="." instance=ExtResource( 41 )] -position = Vector2( 600, 120 ) +position = Vector2( 698, 294 ) max_speed = 120 [node name="StateLabel" parent="Flyer" index="1"] @@ -177,7 +177,7 @@ movement_radius = 4 [node name="FlyingPlatformClean" parent="." instance=ExtResource( 43 )] position = Vector2( 496, 220 ) -[connection signal="ready" from="." to="BoundFrog" method="_on_LevelTemplate_ready"] +[connection signal="ready" from="." to="BoundFrog" method="_on_Level_ready"] [connection signal="body_exited" from="Blobby/BlobbySkin" to="Blobby" method="_on_BlobbySkin_body_exited"] [connection signal="area_exited" from="Spring/SpringPlatform/SpringSkin" to="Spring/SpringPlatform" method="_on_SpringSkin_area_exited"] [connection signal="area_entered" from="Spring/SpringPlatform/EnteringVelocityDetector" to="Spring/SpringPlatform" method="_on_EnteringVelocityDetector_area_entered"] diff --git a/src/Levels/Enemy Test Level.tscn b/src/Levels/Enemy Test Level.tscn index 98eb7a1..86bb406 100644 --- a/src/Levels/Enemy Test Level.tscn +++ b/src/Levels/Enemy Test Level.tscn @@ -38,7 +38,7 @@ points = PoolVector2Array( 0, 0, 24, 0, 24, 24, 0, 24 ) } ] 1/z_index = 0 -[node name="LevelTemplate" type="Node2D"] +[node name="Enemy Test Level" type="Node2D"] __meta__ = { "_edit_horizontal_guides_": [ 464.0 ], "_edit_vertical_guides_": [ 2880.0 ] diff --git a/src/Levels/Flyer Test Level.tscn b/src/Levels/Flyer Test Level.tscn index 8aeafe9..b54aa79 100644 --- a/src/Levels/Flyer Test Level.tscn +++ b/src/Levels/Flyer Test Level.tscn @@ -16,7 +16,7 @@ [sub_resource type="AnimationNodeStateMachinePlayback" id=4] -[node name="LevelTemplate" type="Node2D"] +[node name="Flyer Test Level" type="Node2D"] __meta__ = { "_edit_horizontal_guides_": [ 464.0 ], "_edit_vertical_guides_": [ 2880.0 ] diff --git a/src/Levels/Froggy Test Level.tscn b/src/Levels/Froggy Test Level.tscn index 69c2376..321d315 100644 --- a/src/Levels/Froggy Test Level.tscn +++ b/src/Levels/Froggy Test Level.tscn @@ -21,7 +21,7 @@ [sub_resource type="AnimationNodeStateMachinePlayback" id=5] -[node name="LevelTemplate" type="Node2D"] +[node name="Froggy Test Level" type="Node2D"] __meta__ = { "_edit_horizontal_guides_": [ 464.0 ], "_edit_vertical_guides_": [ 2880.0 ] @@ -160,7 +160,7 @@ rotation = -4.71238 [node name="BoundFrog" parent="." instance=ExtResource( 9 )] position = Vector2( 324, 224 ) -[connection signal="ready" from="." to="BoundFrog" method="_on_LevelTemplate_ready"] +[connection signal="ready" from="." to="BoundFrog" method="_on_Level_ready"] [editable path="UserInterface"] [editable path="UserInterface/HUD"] diff --git a/src/Levels/Grass Test Level.tscn b/src/Levels/Grass Test Level.tscn index d7a191e..8f2a9e0 100644 --- a/src/Levels/Grass Test Level.tscn +++ b/src/Levels/Grass Test Level.tscn @@ -10,7 +10,7 @@ [sub_resource type="AnimationNodeStateMachinePlayback" id=4] -[node name="LevelTemplate" type="Node2D"] +[node name="Grass Test Level" type="Node2D"] position = Vector2( 16, -10 ) __meta__ = { "_edit_horizontal_guides_": [ 464.0 ], @@ -219,10 +219,10 @@ position = Vector2( 210, -15 ) [node name="BlobbyCam" parent="." instance=ExtResource( 11 )] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 7 +frame = 4 [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 12 +frame = 9 [node name="Blobby" parent="." instance=ExtResource( 10 )] unique_name_in_owner = true diff --git a/src/StateMachines/StateMachine.gd b/src/StateMachines/StateMachine.gd index bb4a292..cb0fe90 100644 --- a/src/StateMachines/StateMachine.gd +++ b/src/StateMachines/StateMachine.gd @@ -9,8 +9,8 @@ var states = {} onready var parent = get_parent() # Scene Singletons -onready var levelState := get_tree().root.get_child(0).get_node("%LevelState") -onready var signalManager := get_tree().root.get_child(0).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") +onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") # Basic process flow for every SM diff --git a/src/UserInterface/Buttons/StatsLabel.gd b/src/UserInterface/Buttons/StatsLabel.gd index 21d55ef..49f80c8 100644 --- a/src/UserInterface/Buttons/StatsLabel.gd +++ b/src/UserInterface/Buttons/StatsLabel.gd @@ -1,6 +1,21 @@ extends Label -onready var levelState = $"%LevelState" +onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") func _ready(): - self.text = self.text % [levelState.currency, levelState.kills, levelState.frees] + var wallet = 0 + var deaths = 0 + var kills = 0 + var frees = 0 + var prog = GlobalState.progress_dict + for key in GlobalState.progress_dict: + if prog[key].has("currency"): + wallet += prog[key]["currency"] + if prog[key].has("deaths"): + deaths += prog[key]["deaths"] + if prog[key].has("deaths"): + kills += prog[key]["kills"] + if prog[key].has("frees"): + frees += prog[key]["frees"] + + self.text = self.text % [wallet, deaths, kills, frees] diff --git a/src/UserInterface/Buttons/StatsLabel.tscn b/src/UserInterface/Buttons/StatsLabel.tscn index f71ad3a..c84c501 100644 --- a/src/UserInterface/Buttons/StatsLabel.tscn +++ b/src/UserInterface/Buttons/StatsLabel.tscn @@ -3,7 +3,7 @@ [ext_resource path="res://assets/meta/montserrat_extrabold.otf" type="DynamicFontData" id=1] [sub_resource type="DynamicFont" id=1] -size = 24 +size = 20 use_mipmaps = true use_filter = true font_data = ExtResource( 1 ) diff --git a/src/UserInterface/Screens/HUD.gd b/src/UserInterface/Screens/HUD.gd index a6aa026..e560312 100644 --- a/src/UserInterface/Screens/HUD.gd +++ b/src/UserInterface/Screens/HUD.gd @@ -7,8 +7,8 @@ onready var timer: Label = $HUDOverlay/GetBackTimer onready var currency: Label = $HUDOverlay/Currency onready var kills: Label = $HUDOverlay/Kills onready var frees: Label = $HUDOverlay/Frees -onready var levelState := get_tree().root.get_child(0).get_node("%LevelState") -onready var signalManager := get_tree().root.get_child(0).get_node("%SignalManager") +onready var levelState := get_tree().root.get_child(1).get_node("%LevelState") +onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") func _ready(): @@ -36,7 +36,16 @@ func _zoom_timer() -> void: func update_interface() -> void: - currency.text = "Wallet: %s Orbicles" % levelState.currency + + var wallet = 0 + var prog := GlobalState.progress_dict + for key in prog: + if prog[key].has("currency"): + wallet += prog[key]["currency"] + + wallet += levelState.currency + + currency.text = "Wallet: %s Orbicles" % wallet kills.text = "Kills: %s" % levelState.kills frees.text = "Freed: %s" % levelState.frees diff --git a/src/UserInterface/Screens/LevelEndScreen.tscn b/src/UserInterface/Screens/LevelEndScreen.tscn index 09217ce..df3bcec 100644 --- a/src/UserInterface/Screens/LevelEndScreen.tscn +++ b/src/UserInterface/Screens/LevelEndScreen.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=9 format=2] -[ext_resource path="res://assets/environment/background/background.png" type="Texture" id=1] +[ext_resource path="res://assets/environment/background/space.png" type="Texture" id=1] [ext_resource path="res://assets/meta/new_dynamicfont.tres" type="DynamicFont" id=2] [ext_resource path="res://src/UserInterface/Buttons/Titel.tscn" type="PackedScene" id=3] [ext_resource path="res://src/UserInterface/Buttons/ChangeSceneButton.tscn" type="PackedScene" id=4] @@ -36,14 +36,14 @@ size_flags_horizontal = 3 size_flags_vertical = 3 size_flags_stretch_ratio = 0.0 custom_fonts/font = ExtResource( 2 ) -text = "Thanks You For Playing!" +text = "Thanks Mom!" autowrap = true [node name="StatsLabel" parent="." instance=ExtResource( 6 )] -margin_left = -146.5 -margin_top = -33.5 -margin_right = 146.5 -margin_bottom = 33.5 +margin_left = -343.0 +margin_top = -59.0 +margin_right = 352.0 +margin_bottom = 11.0 size_flags_vertical = 1 align = 1 script = ExtResource( 8 ) diff --git a/src/UserInterface/Screens/MainScreen.tscn b/src/UserInterface/Screens/MainScreen.tscn index 15ae062..5f026a2 100644 --- a/src/UserInterface/Screens/MainScreen.tscn +++ b/src/UserInterface/Screens/MainScreen.tscn @@ -1,12 +1,13 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://src/UserInterface/Buttons/QuitButton.tscn" type="PackedScene" id=1] [ext_resource path="res://src/UserInterface/Buttons/Titel.tscn" type="PackedScene" id=2] [ext_resource path="res://src/UserInterface/Buttons/ChangeSceneButton.tscn" type="PackedScene" id=3] -[ext_resource path="res://assets/environment/background/background.png" type="Texture" id=4] +[ext_resource path="res://assets/environment/background/space.png" type="Texture" id=4] [ext_resource path="res://assets/meta/ui_theme.tres" type="Theme" id=5] [ext_resource path="res://src/UserInterface/Screens/LevelList.gd" type="Script" id=6] [ext_resource path="res://src/UserInterface/Screens/LevelSelectButtonGroup.tres" type="ButtonGroup" id=7] +[ext_resource path="res://assets/environment/background/Spaceship-Wall.png" type="Texture" id=8] [node name="MainScreen" type="Control"] anchor_right = 1.0 @@ -23,6 +24,13 @@ texture = ExtResource( 4 ) expand = true stretch_mode = 1 +[node name="background2" type="TextureRect" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +texture = ExtResource( 8 ) +expand = true +stretch_mode = 1 + [node name="Titel" parent="." instance=ExtResource( 2 )] anchor_left = 0.5 anchor_right = 0.5 diff --git a/src/Utilities/LevelState.gd b/src/Utilities/LevelState.gd index 7a8f3da..cb41675 100644 --- a/src/Utilities/LevelState.gd +++ b/src/Utilities/LevelState.gd @@ -1,6 +1,6 @@ extends Node -onready var signalManager := get_tree().root.get_child(0).get_node("%SignalManager") +onready var signalManager := get_tree().root.get_child(1).get_node("%SignalManager") #TODO Easteregg pls var currency: = 0 setget set_currency diff --git a/src/Utilities/Physic/PhysicsFunc.gd b/src/Utilities/Physic/PhysicsFunc.gd index 9ebf5fb..b665e22 100644 --- a/src/Utilities/Physic/PhysicsFunc.gd +++ b/src/Utilities/Physic/PhysicsFunc.gd @@ -22,4 +22,4 @@ static func two_step_euler(v0, force, mass, delta) -> float: static func two_step_euler_vec(v0: Vector2, force: Vector2, mass: float, delta: float) -> Vector2: var v1 = v0 + force / mass * delta var v2 = v1 + force / mass * delta - return (v1 + v2) / 2 \ No newline at end of file + return (v1 + v2) / 2