summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Luevano Alvarado <david@luevano.xyz>2022-05-22 19:55:48 -0600
committerDavid Luevano Alvarado <david@luevano.xyz>2022-05-22 19:55:48 -0600
commit8314baeeb7a240a2bb5789b9365a8aaa189dba0f (patch)
treebe6aeb12a535e6b75c682feab0218ed32218dd57
parentc3722c88589741926bb8f40896ecf8478a3ec061 (diff)
finished game
basic stuff is up, can still update to make a twist or something
-rw-r--r--.gitignore4
-rw-r--r--README.md1
-rw-r--r--assets/Silver.ttfbin0 -> 3402880 bytes
-rw-r--r--assets/flappybird_assets/background/background_1.png (renamed from assets/background/background_1.png)bin2676 -> 2676 bytes
-rw-r--r--assets/flappybird_assets/background/background_2.png (renamed from assets/background/background_2.png)bin2642 -> 2642 bytes
-rw-r--r--assets/flappybird_assets/background/background_3.png (renamed from assets/background/background_3.png)bin2667 -> 2667 bytes
-rw-r--r--assets/flappybird_assets/background/background_4.png (renamed from assets/background/background_4.png)bin3533 -> 3533 bytes
-rw-r--r--assets/flappybird_assets/background/background_5.png (renamed from assets/background/background_5.png)bin3737 -> 3737 bytes
-rw-r--r--assets/flappybird_assets/background/background_6.png (renamed from assets/background/background_6.png)bin3833 -> 3833 bytes
-rw-r--r--assets/flappybird_assets/player/bird_1.png (renamed from assets/player/bird_1.png)bin609 -> 609 bytes
-rw-r--r--assets/flappybird_assets/player/bird_2.png (renamed from assets/player/bird_2.png)bin644 -> 644 bytes
-rw-r--r--assets/flappybird_assets/player/bird_3.png (renamed from assets/player/bird_3.png)bin618 -> 618 bytes
-rw-r--r--assets/flappybird_assets/readme.txt (renamed from assets/readme.txt)0
-rw-r--r--assets/flappybird_assets/tileset/style_1/old_style_2.png (renamed from assets/tileset/style_1/old_style_2.png)bin2111 -> 2111 bytes
-rw-r--r--assets/flappybird_assets/tileset/style_1/pipe_style_1.png (renamed from assets/tileset/style_1/pipe_style_1.png)bin1889 -> 1889 bytes
-rw-r--r--assets/flappybird_assets/tileset/style_1/tile_style_1.png (renamed from assets/tileset/style_1/tile_style_1.png)bin4910 -> 4910 bytes
-rw-r--r--assets/flappybird_assets/tileset/style_2/old_style_2.png (renamed from assets/tileset/style_2/old_style_2.png)bin6695 -> 6695 bytes
-rw-r--r--assets/flappybird_assets/tileset/style_2/pipe_style_2.png (renamed from assets/tileset/style_2/pipe_style_2.png)bin6104 -> 6104 bytes
-rw-r--r--assets/flappybird_assets/tileset/style_2/tile_style_2.png (renamed from assets/tileset/style_2/tile_style_2.png)bin18555 -> 18555 bytes
-rw-r--r--assets/flappybird_assets/tileset/style_3/old_style_3.png (renamed from assets/tileset/style_3/old_style_3.png)bin6419 -> 6419 bytes
-rw-r--r--assets/flappybird_assets/tileset/style_3/pipe_style_3.png (renamed from assets/tileset/style_3/pipe_style_3.png)bin7038 -> 7038 bytes
-rw-r--r--assets/flappybird_assets/tileset/style_3/tile_style_3.png (renamed from assets/tileset/style_3/tile_style_3.png)bin14951 -> 14951 bytes
-rw-r--r--assets/icon.asepritebin0 -> 1127 bytes
-rw-r--r--assets/icon.icobin0 -> 115872 bytes
-rw-r--r--assets/icon.pngbin0 -> 742 bytes
-rw-r--r--src/Main.tscn6
-rw-r--r--src/entities/actors/player/Player.tscn2
-rw-r--r--src/entities/actors/player/player.gd28
-rw-r--r--src/fonts/Silver.ttfbin0 -> 3402880 bytes
-rw-r--r--src/fonts/SilverDynamicFont.tres9
-rw-r--r--src/fonts/SilverDynamicFontData.tres5
-rw-r--r--src/fonts/SilverScoreDynamicFont.tres9
-rw-r--r--src/icons/game.icobin0 -> 115872 bytes
-rw-r--r--src/icons/game.pngbin3305 -> 742 bytes
-rw-r--r--src/icons/game.png.import6
-rw-r--r--src/levels/Game.tscn1
-rw-r--r--src/levels/game.gd29
-rw-r--r--src/levels/world/ground/ground_tile_map.gd4
-rw-r--r--src/levels/world/pipe/pipe_tile_map.gd6
-rw-r--r--src/levels/world/world_tiles.gd14
-rw-r--r--src/main.gd11
-rw-r--r--src/project.godot27
-rw-r--r--src/saved_data.gd41
-rw-r--r--src/ui/UI.tscn67
-rw-r--r--src/ui/ui.gd43
45 files changed, 265 insertions, 48 deletions
diff --git a/.gitignore b/.gitignore
index 79d3eb4..ae164bd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,3 @@
-
# Godot-specific ignores
.import/
export.cfg
@@ -7,3 +6,6 @@ export_presets.cfg
# Mono-specific ignores
.mono/
data_*/
+
+# releases
+releases/
diff --git a/README.md b/README.md
index eea497e..bf5d5f9 100644
--- a/README.md
+++ b/README.md
@@ -4,3 +4,4 @@
# Credits
Sprites by [MegaCrash](https://megacrash.itch.io/): [flappy-bird-assets](https://megacrash.itch.io/flappy-bird-assets); just modified the names to be all lowercase because I like it that way.
+Font by [https://poppyworks.itch.io/]: [Silver](https://poppyworks.itch.io/silver).
diff --git a/assets/Silver.ttf b/assets/Silver.ttf
new file mode 100644
index 0000000..2db4832
--- /dev/null
+++ b/assets/Silver.ttf
Binary files differ
diff --git a/assets/background/background_1.png b/assets/flappybird_assets/background/background_1.png
index 59d4f58..59d4f58 100644
--- a/assets/background/background_1.png
+++ b/assets/flappybird_assets/background/background_1.png
Binary files differ
diff --git a/assets/background/background_2.png b/assets/flappybird_assets/background/background_2.png
index c6a4c4e..c6a4c4e 100644
--- a/assets/background/background_2.png
+++ b/assets/flappybird_assets/background/background_2.png
Binary files differ
diff --git a/assets/background/background_3.png b/assets/flappybird_assets/background/background_3.png
index 91d4246..91d4246 100644
--- a/assets/background/background_3.png
+++ b/assets/flappybird_assets/background/background_3.png
Binary files differ
diff --git a/assets/background/background_4.png b/assets/flappybird_assets/background/background_4.png
index f3b9917..f3b9917 100644
--- a/assets/background/background_4.png
+++ b/assets/flappybird_assets/background/background_4.png
Binary files differ
diff --git a/assets/background/background_5.png b/assets/flappybird_assets/background/background_5.png
index 8523545..8523545 100644
--- a/assets/background/background_5.png
+++ b/assets/flappybird_assets/background/background_5.png
Binary files differ
diff --git a/assets/background/background_6.png b/assets/flappybird_assets/background/background_6.png
index 36adcec..36adcec 100644
--- a/assets/background/background_6.png
+++ b/assets/flappybird_assets/background/background_6.png
Binary files differ
diff --git a/assets/player/bird_1.png b/assets/flappybird_assets/player/bird_1.png
index 92abb54..92abb54 100644
--- a/assets/player/bird_1.png
+++ b/assets/flappybird_assets/player/bird_1.png
Binary files differ
diff --git a/assets/player/bird_2.png b/assets/flappybird_assets/player/bird_2.png
index 387250a..387250a 100644
--- a/assets/player/bird_2.png
+++ b/assets/flappybird_assets/player/bird_2.png
Binary files differ
diff --git a/assets/player/bird_3.png b/assets/flappybird_assets/player/bird_3.png
index 5841b43..5841b43 100644
--- a/assets/player/bird_3.png
+++ b/assets/flappybird_assets/player/bird_3.png
Binary files differ
diff --git a/assets/readme.txt b/assets/flappybird_assets/readme.txt
index 7429fe4..7429fe4 100644
--- a/assets/readme.txt
+++ b/assets/flappybird_assets/readme.txt
diff --git a/assets/tileset/style_1/old_style_2.png b/assets/flappybird_assets/tileset/style_1/old_style_2.png
index df1eb20..df1eb20 100644
--- a/assets/tileset/style_1/old_style_2.png
+++ b/assets/flappybird_assets/tileset/style_1/old_style_2.png
Binary files differ
diff --git a/assets/tileset/style_1/pipe_style_1.png b/assets/flappybird_assets/tileset/style_1/pipe_style_1.png
index e101469..e101469 100644
--- a/assets/tileset/style_1/pipe_style_1.png
+++ b/assets/flappybird_assets/tileset/style_1/pipe_style_1.png
Binary files differ
diff --git a/assets/tileset/style_1/tile_style_1.png b/assets/flappybird_assets/tileset/style_1/tile_style_1.png
index 944f908..944f908 100644
--- a/assets/tileset/style_1/tile_style_1.png
+++ b/assets/flappybird_assets/tileset/style_1/tile_style_1.png
Binary files differ
diff --git a/assets/tileset/style_2/old_style_2.png b/assets/flappybird_assets/tileset/style_2/old_style_2.png
index 6640972..6640972 100644
--- a/assets/tileset/style_2/old_style_2.png
+++ b/assets/flappybird_assets/tileset/style_2/old_style_2.png
Binary files differ
diff --git a/assets/tileset/style_2/pipe_style_2.png b/assets/flappybird_assets/tileset/style_2/pipe_style_2.png
index 281a0ca..281a0ca 100644
--- a/assets/tileset/style_2/pipe_style_2.png
+++ b/assets/flappybird_assets/tileset/style_2/pipe_style_2.png
Binary files differ
diff --git a/assets/tileset/style_2/tile_style_2.png b/assets/flappybird_assets/tileset/style_2/tile_style_2.png
index 2916be0..2916be0 100644
--- a/assets/tileset/style_2/tile_style_2.png
+++ b/assets/flappybird_assets/tileset/style_2/tile_style_2.png
Binary files differ
diff --git a/assets/tileset/style_3/old_style_3.png b/assets/flappybird_assets/tileset/style_3/old_style_3.png
index e68df1e..e68df1e 100644
--- a/assets/tileset/style_3/old_style_3.png
+++ b/assets/flappybird_assets/tileset/style_3/old_style_3.png
Binary files differ
diff --git a/assets/tileset/style_3/pipe_style_3.png b/assets/flappybird_assets/tileset/style_3/pipe_style_3.png
index 810d70e..810d70e 100644
--- a/assets/tileset/style_3/pipe_style_3.png
+++ b/assets/flappybird_assets/tileset/style_3/pipe_style_3.png
Binary files differ
diff --git a/assets/tileset/style_3/tile_style_3.png b/assets/flappybird_assets/tileset/style_3/tile_style_3.png
index 157fc30..157fc30 100644
--- a/assets/tileset/style_3/tile_style_3.png
+++ b/assets/flappybird_assets/tileset/style_3/tile_style_3.png
Binary files differ
diff --git a/assets/icon.aseprite b/assets/icon.aseprite
new file mode 100644
index 0000000..07271a8
--- /dev/null
+++ b/assets/icon.aseprite
Binary files differ
diff --git a/assets/icon.ico b/assets/icon.ico
new file mode 100644
index 0000000..9abb618
--- /dev/null
+++ b/assets/icon.ico
Binary files differ
diff --git a/assets/icon.png b/assets/icon.png
new file mode 100644
index 0000000..970aa14
--- /dev/null
+++ b/assets/icon.png
Binary files differ
diff --git a/src/Main.tscn b/src/Main.tscn
index 94074e2..56dc7e2 100644
--- a/src/Main.tscn
+++ b/src/Main.tscn
@@ -1,9 +1,13 @@
-[gd_scene load_steps=3 format=2]
+[gd_scene load_steps=4 format=2]
[ext_resource path="res://main.gd" type="Script" id=1]
[ext_resource path="res://levels/Game.tscn" type="PackedScene" id=2]
+[ext_resource path="res://ui/UI.tscn" type="PackedScene" id=3]
[node name="Main" type="Node2D"]
script = ExtResource( 1 )
[node name="Game" parent="." instance=ExtResource( 2 )]
+position = Vector2( 300, 400 )
+
+[node name="UI" parent="." instance=ExtResource( 3 )]
diff --git a/src/entities/actors/player/Player.tscn b/src/entities/actors/player/Player.tscn
index 3c55577..217d1de 100644
--- a/src/entities/actors/player/Player.tscn
+++ b/src/entities/actors/player/Player.tscn
@@ -75,7 +75,7 @@ animations = [ {
radius = 7.0
[node name="Player" type="KinematicBody2D"]
-collision_mask = 14
+collision_mask = 6
script = ExtResource( 1 )
[node name="Sprite" type="AnimatedSprite" parent="."]
diff --git a/src/entities/actors/player/player.gd b/src/entities/actors/player/player.gd
index b56ddf5..ea642de 100644
--- a/src/entities/actors/player/player.gd
+++ b/src/entities/actors/player/player.gd
@@ -2,7 +2,7 @@ class_name Player
extends KinematicBody2D
signal died
-var input_disabled: bool = false
+var dead: bool = false
export(float, 1.0, 1000.0, 1.0) var SPEED: float = 100.0
export(float, 0.01, 100.0, 0.01) var ROT_SPEED: float = 10.0
@@ -12,13 +12,14 @@ onready var sprite: AnimatedSprite = $Sprite
var gravity: float = 10 * ProjectSettings.get_setting("physics/2d/default_gravity")
var velocity: Vector2 = Vector2.ZERO
+var last_collision: KinematicCollision2D
func _physics_process(delta: float) -> void:
velocity.x = SPEED
velocity.y += gravity * delta
- if Input.is_action_just_pressed("jump") and not input_disabled:
+ if Input.is_action_just_pressed("jump") and not dead:
velocity.y = -JUMP_VELOCITY
if velocity.y < 0.0:
@@ -30,15 +31,12 @@ func _physics_process(delta: float) -> void:
if rotation < PI/2:
rotate(0.01 * ROT_SPEED)
- # when dying because of ground or pipe
- # if not input_disabled:
- # pass
- # else:
- # input_disabled = true
- # SPEED = 0.0
- # emit_signal("died")
-
+ # maybe can be done with move_and_collide, but this works
velocity = move_and_slide(velocity)
+ last_collision = get_last_slide_collision()
+
+ if not dead and last_collision:
+ _emit_player_died()
func _stop_sprite() -> void:
@@ -49,7 +47,13 @@ func _stop_sprite() -> void:
# when dying because of boundary
-func _on_ceiling_detector_body_entered(body: Node2D) -> void:
- input_disabled = true
+func _on_CeilingDetector_body_entered(body: Node2D) -> void:
+ _emit_player_died()
+
+
+func _emit_player_died() -> void:
+ # bit 2 corresponds to pipe (starts from 0)
+ set_collision_mask_bit(2, false)
+ dead = true
SPEED = 0.0
emit_signal("died")
diff --git a/src/fonts/Silver.ttf b/src/fonts/Silver.ttf
new file mode 100644
index 0000000..2db4832
--- /dev/null
+++ b/src/fonts/Silver.ttf
Binary files differ
diff --git a/src/fonts/SilverDynamicFont.tres b/src/fonts/SilverDynamicFont.tres
new file mode 100644
index 0000000..21a2ec0
--- /dev/null
+++ b/src/fonts/SilverDynamicFont.tres
@@ -0,0 +1,9 @@
+[gd_resource type="DynamicFont" load_steps=2 format=2]
+
+[ext_resource path="res://fonts/SilverDynamicFontData.tres" type="DynamicFontData" id=1]
+
+[resource]
+size = 32
+outline_size = 1
+outline_color = Color( 0, 0, 0, 1 )
+font_data = ExtResource( 1 )
diff --git a/src/fonts/SilverDynamicFontData.tres b/src/fonts/SilverDynamicFontData.tres
new file mode 100644
index 0000000..1a51019
--- /dev/null
+++ b/src/fonts/SilverDynamicFontData.tres
@@ -0,0 +1,5 @@
+[gd_resource type="DynamicFontData" format=2]
+
+[resource]
+antialiased = false
+font_path = "res://fonts/Silver.ttf"
diff --git a/src/fonts/SilverScoreDynamicFont.tres b/src/fonts/SilverScoreDynamicFont.tres
new file mode 100644
index 0000000..4718ffa
--- /dev/null
+++ b/src/fonts/SilverScoreDynamicFont.tres
@@ -0,0 +1,9 @@
+[gd_resource type="DynamicFont" load_steps=2 format=2]
+
+[ext_resource path="res://fonts/SilverDynamicFontData.tres" type="DynamicFontData" id=1]
+
+[resource]
+size = 128
+outline_size = 2
+outline_color = Color( 0, 0, 0, 1 )
+font_data = ExtResource( 1 )
diff --git a/src/icons/game.ico b/src/icons/game.ico
new file mode 100644
index 0000000..9abb618
--- /dev/null
+++ b/src/icons/game.ico
Binary files differ
diff --git a/src/icons/game.png b/src/icons/game.png
index c98fbb6..970aa14 100644
--- a/src/icons/game.png
+++ b/src/icons/game.png
Binary files differ
diff --git a/src/icons/game.png.import b/src/icons/game.png.import
index de0f547..b57be49 100644
--- a/src/icons/game.png.import
+++ b/src/icons/game.png.import
@@ -20,16 +20,16 @@ compress/hdr_mode=0
compress/bptc_ldr=0
compress/normal_map=0
flags/repeat=0
-flags/filter=true
+flags/filter=false
flags/mipmaps=false
flags/anisotropic=false
flags/srgb=2
-process/fix_alpha_border=true
+process/fix_alpha_border=false
process/premult_alpha=false
process/HDR_as_SRGB=false
process/invert_color=false
process/normal_map_invert_y=false
stream=false
size_limit=0
-detect_3d=true
+detect_3d=false
svg/scale=1.0
diff --git a/src/levels/Game.tscn b/src/levels/Game.tscn
index 1f25cf4..55346f2 100644
--- a/src/levels/Game.tscn
+++ b/src/levels/Game.tscn
@@ -25,4 +25,3 @@ position = Vector2( 0, -140 )
[node name="Camera" type="Camera2D" parent="."]
current = true
-zoom = Vector2( 2, 2 )
diff --git a/src/levels/game.gd b/src/levels/game.gd
index 5b3faab..bb7b235 100644
--- a/src/levels/game.gd
+++ b/src/levels/game.gd
@@ -3,6 +3,7 @@ extends Node2D
signal game_started
signal game_over
+signal new_score(score, high_score)
onready var player: Player = $Player
onready var background: Sprite= $Background
@@ -11,6 +12,7 @@ onready var ceiling_detector: Area2D = $CeilingDetector
onready var world_detector: Node2D = $WorldDetector
onready var camera: Camera2D = $Camera
+onready var high_score: int = SavedData.get_high_score()
var score: int = 0
var _game_scale: float = ProjectSettings.get_setting("application/config/game_scale")
@@ -23,11 +25,11 @@ func _ready() -> void:
# so we move at the actual speed of the player
player_speed = player.SPEED / _game_scale
- player.connect("died", self, "_on_player_died")
- ceiling_detector.connect("body_entered", player, "_on_ceiling_detector_body_entered")
- world_detector.connect("ground_stopped_colliding", world_tiles, "_on_world_detector_ground_stopped_colliding")
- world_detector.connect("ground_started_colliding", world_tiles, "_on_world_detector_ground_started_colliding")
- world_detector.connect("pipe_started_colliding", world_tiles, "_on_world_detector_pipe_started_colliding")
+ player.connect("died", self, "_on_Player_died")
+ ceiling_detector.connect("body_entered", player, "_on_CeilingDetector_body_entered")
+ world_detector.connect("ground_stopped_colliding", world_tiles, "_on_WorldDetector_ground_stopped_colliding")
+ world_detector.connect("ground_started_colliding", world_tiles, "_on_WorldDetector_ground_started_colliding")
+ world_detector.connect("pipe_started_colliding", world_tiles, "_on_WorldDetector_pipe_started_colliding")
# need to start without processing, so we can move through the menus
_set_processing_to(false)
@@ -39,6 +41,9 @@ func _input(event: InputEvent) -> void:
_set_processing_to(true)
is_game_running = true
+ if event.is_action_pressed("restart"):
+ get_tree().reload_current_scene()
+
func _physics_process(delta: float) -> void:
ceiling_detector.move_local_x(player_speed * delta)
@@ -59,14 +64,16 @@ func _set_processing_to(on_off: bool, include_player: bool = true) -> void:
ceiling_detector.set_physics_process(on_off)
-func _on_player_died() -> void:
- player.set_collision_mask_bit(2, false)
+func _on_Player_died() -> void:
_set_processing_to(false, false)
- print("game_over")
emit_signal("game_over")
-func _on_score_detector_body_entered(body: Node2D) -> void:
+func _on_ScoreDetector_body_entered(body: Node2D) -> void:
score += 1
- # counter_label.set_text("%s" % score)
- print(score) \ No newline at end of file
+ if score > high_score:
+ high_score = score
+ SavedData.set_new_high_score(high_score)
+ SavedData.save_data()
+
+ emit_signal("new_score", score, high_score)
diff --git a/src/levels/world/ground/ground_tile_map.gd b/src/levels/world/ground/ground_tile_map.gd
index d7f46ae..b3fc545 100644
--- a/src/levels/world/ground/ground_tile_map.gd
+++ b/src/levels/world/ground/ground_tile_map.gd
@@ -33,9 +33,9 @@ func _get_random_ground() -> int:
return randi() % (Ground.size() - 1)
-func _on_world_tiles_place_ground() -> void:
+func _on_WorldTiles_place_ground() -> void:
_place_new_ground()
-func _on_world_tiles_remove_ground() -> void:
+func _on_WorldTiles_remove_ground() -> void:
_remove_first_ground()
diff --git a/src/levels/world/pipe/pipe_tile_map.gd b/src/levels/world/pipe/pipe_tile_map.gd
index 798e5c8..ce85741 100644
--- a/src/levels/world/pipe/pipe_tile_map.gd
+++ b/src/levels/world/pipe/pipe_tile_map.gd
@@ -44,7 +44,7 @@ func _place_new_pipe() -> void:
var detector: Area2D = detector_scene.instance()
detector.position = map_to_world(new_pipe_starting_position) + detector_offset
- detector.connect("body_entered", game, "_on_score_detector_body_entered")
+ detector.connect("body_entered", game, "_on_ScoreDetector_body_entered")
detector_stack.append(detector)
add_child(detector)
@@ -69,9 +69,9 @@ func _get_random_pipe() -> int:
return randi() % PipePattern.size()
-func _on_world_tiles_place_pipe() -> void:
+func _on_WorldTiles_place_pipe() -> void:
_place_new_pipe()
-func _on_world_tiles_remove_pipe() -> void:
+func _on_WorldTiles_remove_pipe() -> void:
_remove_old_pipe()
diff --git a/src/levels/world/world_tiles.gd b/src/levels/world/world_tiles.gd
index b6a5d98..d0b4ed7 100644
--- a/src/levels/world/world_tiles.gd
+++ b/src/levels/world/world_tiles.gd
@@ -15,13 +15,13 @@ var tiles_since_last_pipe: int = PIPE_SEP - 1
func _ready() -> void:
- connect("place_ground", ground_tile_map, "_on_world_tiles_place_ground")
- connect("remove_ground", ground_tile_map, "_on_world_tiles_remove_ground")
- connect("place_pipe", pipe_tile_map, "_on_world_tiles_place_pipe")
- connect("remove_pipe", pipe_tile_map, "_on_world_tiles_remove_pipe")
+ connect("place_ground", ground_tile_map, "_on_WorldTiles_place_ground")
+ connect("remove_ground", ground_tile_map, "_on_WorldTiles_remove_ground")
+ connect("place_pipe", pipe_tile_map, "_on_WorldTiles_place_pipe")
+ connect("remove_pipe", pipe_tile_map, "_on_WorldTiles_remove_pipe")
-func _on_world_detector_ground_stopped_colliding() -> void:
+func _on_WorldDetector_ground_stopped_colliding() -> void:
# _place_new_tiles()
emit_signal("place_ground")
@@ -31,9 +31,9 @@ func _on_world_detector_ground_stopped_colliding() -> void:
tiles_since_last_pipe = 0
-func _on_world_detector_ground_started_colliding() -> void:
+func _on_WorldDetector_ground_started_colliding() -> void:
emit_signal("remove_ground")
-func _on_world_detector_pipe_started_colliding() -> void:
+func _on_WorldDetector_pipe_started_colliding() -> void:
emit_signal("remove_pipe")
diff --git a/src/main.gd b/src/main.gd
index 47dbcd0..995eb2e 100644
--- a/src/main.gd
+++ b/src/main.gd
@@ -2,11 +2,12 @@ class_name Main
extends Node2D
onready var game: Game = $Game
+onready var ui: UI = $UI
-
-func _ready() -> void:
- pass
+var _game_over: bool = false
-func _process(delta: float) -> void:
- pass
+func _ready() -> void:
+ game.connect("game_started", ui, "_on_Game_game_started")
+ game.connect("game_over", ui, "_on_Game_game_over")
+ game.connect("new_score", ui, "_on_Game_new_score")
diff --git a/src/project.godot b/src/project.godot
index ed048cf..e85c556 100644
--- a/src/project.godot
+++ b/src/project.godot
@@ -34,6 +34,11 @@ _global_script_classes=[ {
"language": "GDScript",
"path": "res://entities/actors/player/player.gd"
}, {
+"base": "CanvasLayer",
+"class": "UI",
+"language": "GDScript",
+"path": "res://ui/ui.gd"
+}, {
"base": "Node2D",
"class": "WorldDetector",
"language": "GDScript",
@@ -50,16 +55,24 @@ _global_script_class_icons={
"Main": "",
"PipeTileMap": "",
"Player": "",
+"UI": "",
"WorldDetector": "",
"WorldTiles": ""
}
[application]
-config/name="FlappyBird"
+config/name="FlappyBirdGodot"
+config/description="FlappyBird clone made in Godot."
run/main_scene="res://Main.tscn"
config/icon="res://icons/game.png"
+config/windows_native_icon="res://icons/game.ico"
config/game_scale=3.0
+config/version="1.0.0"
+
+[autoload]
+
+SavedData="*res://saved_data.gd"
[debug]
@@ -71,6 +84,8 @@ gdscript/warnings/return_value_discarded=false
window/size/width=600
window/size/height=800
+window/stretch/mode="viewport"
+window/stretch/aspect="keep"
[gui]
@@ -91,6 +106,16 @@ jump={
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":32,"unicode":0,"echo":false,"script":null)
]
}
+toggle_debug={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":80,"unicode":0,"echo":false,"script":null)
+ ]
+}
+restart={
+"deadzone": 0.5,
+"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":82,"unicode":0,"echo":false,"script":null)
+ ]
+}
[layer_names]
diff --git a/src/saved_data.gd b/src/saved_data.gd
new file mode 100644
index 0000000..3f12e01
--- /dev/null
+++ b/src/saved_data.gd
@@ -0,0 +1,41 @@
+extends Node
+
+const DATA_PATH: String = "user://data.cfg"
+const SCORE_SECTION: String = "score"
+
+var _data: ConfigFile
+
+
+func _ready() -> void:
+ _load_data()
+
+ if not _data.has_section(SCORE_SECTION):
+ set_new_high_score(0)
+ save_data()
+
+
+func save_data() -> void:
+ var err: int = _data.save(DATA_PATH)
+ if err != OK:
+ print("[ERROR] Cannot save data.")
+
+
+func set_new_high_score(high_score: int) -> void:
+ _data.set_value(SCORE_SECTION, "high_score", high_score)
+
+
+func get_high_score() -> int:
+ return _data.get_value(SCORE_SECTION, "high_score")
+
+
+func _load_data() -> void:
+ # create an empty file if not present to avoid error while loading settings
+ var file: File = File.new()
+ if not file.file_exists(DATA_PATH):
+ file.open(DATA_PATH, file.WRITE)
+ file.close()
+
+ _data = ConfigFile.new()
+ var err: int = _data.load(DATA_PATH)
+ if err != OK:
+ print("[ERROR] Cannot load data.")
diff --git a/src/ui/UI.tscn b/src/ui/UI.tscn
new file mode 100644
index 0000000..522afba
--- /dev/null
+++ b/src/ui/UI.tscn
@@ -0,0 +1,67 @@
+[gd_scene load_steps=4 format=2]
+
+[ext_resource path="res://fonts/SilverScoreDynamicFont.tres" type="DynamicFont" id=1]
+[ext_resource path="res://fonts/SilverDynamicFont.tres" type="DynamicFont" id=2]
+[ext_resource path="res://ui/ui.gd" type="Script" id=3]
+
+[node name="UI" type="CanvasLayer"]
+script = ExtResource( 3 )
+
+[node name="MarginContainer" type="MarginContainer" parent="."]
+anchor_right = 1.0
+anchor_bottom = 1.0
+margin_left = 10.0
+margin_top = 10.0
+margin_right = -10.0
+margin_bottom = -10.0
+
+[node name="InfoContainer" type="VBoxContainer" parent="MarginContainer"]
+margin_right = 580.0
+margin_bottom = 780.0
+custom_constants/separation = 250
+
+[node name="ScoreContainer" type="VBoxContainer" parent="MarginContainer/InfoContainer"]
+margin_right = 580.0
+margin_bottom = 183.0
+
+[node name="Score" type="Label" parent="MarginContainer/InfoContainer/ScoreContainer"]
+margin_right = 580.0
+margin_bottom = 142.0
+custom_fonts/font = ExtResource( 1 )
+text = "0"
+align = 1
+
+[node name="HighScore" type="Label" parent="MarginContainer/InfoContainer/ScoreContainer"]
+margin_top = 146.0
+margin_right = 580.0
+margin_bottom = 183.0
+custom_fonts/font = ExtResource( 2 )
+text = "High score: 0"
+align = 1
+
+[node name="StartGame" type="Label" parent="MarginContainer/InfoContainer"]
+margin_top = 433.0
+margin_right = 580.0
+margin_bottom = 470.0
+custom_fonts/font = ExtResource( 2 )
+text = "Press space to start"
+align = 1
+
+[node name="DebugContainer" type="VBoxContainer" parent="MarginContainer"]
+margin_right = 580.0
+margin_bottom = 780.0
+
+[node name="FPS" type="Label" parent="MarginContainer/DebugContainer"]
+margin_right = 580.0
+margin_bottom = 14.0
+
+[node name="VersionContainer" type="VBoxContainer" parent="MarginContainer"]
+margin_right = 580.0
+margin_bottom = 780.0
+alignment = 2
+
+[node name="Version" type="Label" parent="MarginContainer/VersionContainer"]
+margin_top = 766.0
+margin_right = 580.0
+margin_bottom = 780.0
+align = 2
diff --git a/src/ui/ui.gd b/src/ui/ui.gd
new file mode 100644
index 0000000..9d84652
--- /dev/null
+++ b/src/ui/ui.gd
@@ -0,0 +1,43 @@
+class_name UI
+extends CanvasLayer
+
+onready var fps_label: Label = $MarginContainer/DebugContainer/FPS
+onready var version_label: Label = $MarginContainer/VersionContainer/Version
+onready var score_label: Label = $MarginContainer/InfoContainer/ScoreContainer/Score
+onready var high_score_label: Label = $MarginContainer/InfoContainer/ScoreContainer/HighScore
+onready var start_game_label: Label = $MarginContainer/InfoContainer/StartGame
+
+onready var _initial_high_score: int = SavedData.get_high_score()
+
+var _version: String = ProjectSettings.get_setting("application/config/version")
+
+func _ready() -> void:
+ fps_label.visible = false
+ version_label.set_text("v%s" % _version)
+ high_score_label.set_text("High score: %s" % _initial_high_score)
+
+
+func _input(event: InputEvent) -> void:
+ if event.is_action_pressed("toggle_debug"):
+ fps_label.visible = !fps_label.visible
+
+
+func _process(delta: float) -> void:
+ if fps_label.visible:
+ fps_label.set_text("FPS: %d" % Performance.get_monitor(Performance.TIME_FPS))
+
+
+func _on_Game_game_started() -> void:
+ start_game_label.visible = false
+ high_score_label.visible = false
+
+
+func _on_Game_game_over() -> void:
+ start_game_label.set_text("Press R to restart")
+ start_game_label.visible = true
+ high_score_label.visible = true
+
+
+func _on_Game_new_score(score: int, high_score: int) -> void:
+ score_label.set_text(String(score))
+ high_score_label.set_text("High score: %s" % high_score)