diff options
author | David Luevano Alvarado <david@luevano.xyz> | 2022-05-22 19:55:48 -0600 |
---|---|---|
committer | David Luevano Alvarado <david@luevano.xyz> | 2022-05-22 19:55:48 -0600 |
commit | 8314baeeb7a240a2bb5789b9365a8aaa189dba0f (patch) | |
tree | be6aeb12a535e6b75c682feab0218ed32218dd57 | |
parent | c3722c88589741926bb8f40896ecf8478a3ec061 (diff) |
finished game
basic stuff is up, can still update to make a twist or something
-rw-r--r-- | .gitignore | 4 | ||||
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | assets/Silver.ttf | bin | 0 -> 3402880 bytes | |||
-rw-r--r-- | assets/flappybird_assets/background/background_1.png (renamed from assets/background/background_1.png) | bin | 2676 -> 2676 bytes | |||
-rw-r--r-- | assets/flappybird_assets/background/background_2.png (renamed from assets/background/background_2.png) | bin | 2642 -> 2642 bytes | |||
-rw-r--r-- | assets/flappybird_assets/background/background_3.png (renamed from assets/background/background_3.png) | bin | 2667 -> 2667 bytes | |||
-rw-r--r-- | assets/flappybird_assets/background/background_4.png (renamed from assets/background/background_4.png) | bin | 3533 -> 3533 bytes | |||
-rw-r--r-- | assets/flappybird_assets/background/background_5.png (renamed from assets/background/background_5.png) | bin | 3737 -> 3737 bytes | |||
-rw-r--r-- | assets/flappybird_assets/background/background_6.png (renamed from assets/background/background_6.png) | bin | 3833 -> 3833 bytes | |||
-rw-r--r-- | assets/flappybird_assets/player/bird_1.png (renamed from assets/player/bird_1.png) | bin | 609 -> 609 bytes | |||
-rw-r--r-- | assets/flappybird_assets/player/bird_2.png (renamed from assets/player/bird_2.png) | bin | 644 -> 644 bytes | |||
-rw-r--r-- | assets/flappybird_assets/player/bird_3.png (renamed from assets/player/bird_3.png) | bin | 618 -> 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) | bin | 2111 -> 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) | bin | 1889 -> 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) | bin | 4910 -> 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) | bin | 6695 -> 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) | bin | 6104 -> 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) | bin | 18555 -> 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) | bin | 6419 -> 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) | bin | 7038 -> 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) | bin | 14951 -> 14951 bytes | |||
-rw-r--r-- | assets/icon.aseprite | bin | 0 -> 1127 bytes | |||
-rw-r--r-- | assets/icon.ico | bin | 0 -> 115872 bytes | |||
-rw-r--r-- | assets/icon.png | bin | 0 -> 742 bytes | |||
-rw-r--r-- | src/Main.tscn | 6 | ||||
-rw-r--r-- | src/entities/actors/player/Player.tscn | 2 | ||||
-rw-r--r-- | src/entities/actors/player/player.gd | 28 | ||||
-rw-r--r-- | src/fonts/Silver.ttf | bin | 0 -> 3402880 bytes | |||
-rw-r--r-- | src/fonts/SilverDynamicFont.tres | 9 | ||||
-rw-r--r-- | src/fonts/SilverDynamicFontData.tres | 5 | ||||
-rw-r--r-- | src/fonts/SilverScoreDynamicFont.tres | 9 | ||||
-rw-r--r-- | src/icons/game.ico | bin | 0 -> 115872 bytes | |||
-rw-r--r-- | src/icons/game.png | bin | 3305 -> 742 bytes | |||
-rw-r--r-- | src/icons/game.png.import | 6 | ||||
-rw-r--r-- | src/levels/Game.tscn | 1 | ||||
-rw-r--r-- | src/levels/game.gd | 29 | ||||
-rw-r--r-- | src/levels/world/ground/ground_tile_map.gd | 4 | ||||
-rw-r--r-- | src/levels/world/pipe/pipe_tile_map.gd | 6 | ||||
-rw-r--r-- | src/levels/world/world_tiles.gd | 14 | ||||
-rw-r--r-- | src/main.gd | 11 | ||||
-rw-r--r-- | src/project.godot | 27 | ||||
-rw-r--r-- | src/saved_data.gd | 41 | ||||
-rw-r--r-- | src/ui/UI.tscn | 67 | ||||
-rw-r--r-- | src/ui/ui.gd | 43 |
45 files changed, 265 insertions, 48 deletions
@@ -1,4 +1,3 @@ - # Godot-specific ignores .import/ export.cfg @@ -7,3 +6,6 @@ export_presets.cfg # Mono-specific ignores .mono/ data_*/ + +# releases +releases/ @@ -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 Binary files differnew file mode 100644 index 0000000..2db4832 --- /dev/null +++ b/assets/Silver.ttf diff --git a/assets/background/background_1.png b/assets/flappybird_assets/background/background_1.png Binary files differindex 59d4f58..59d4f58 100644 --- a/assets/background/background_1.png +++ b/assets/flappybird_assets/background/background_1.png diff --git a/assets/background/background_2.png b/assets/flappybird_assets/background/background_2.png Binary files differindex c6a4c4e..c6a4c4e 100644 --- a/assets/background/background_2.png +++ b/assets/flappybird_assets/background/background_2.png diff --git a/assets/background/background_3.png b/assets/flappybird_assets/background/background_3.png Binary files differindex 91d4246..91d4246 100644 --- a/assets/background/background_3.png +++ b/assets/flappybird_assets/background/background_3.png diff --git a/assets/background/background_4.png b/assets/flappybird_assets/background/background_4.png Binary files differindex f3b9917..f3b9917 100644 --- a/assets/background/background_4.png +++ b/assets/flappybird_assets/background/background_4.png diff --git a/assets/background/background_5.png b/assets/flappybird_assets/background/background_5.png Binary files differindex 8523545..8523545 100644 --- a/assets/background/background_5.png +++ b/assets/flappybird_assets/background/background_5.png diff --git a/assets/background/background_6.png b/assets/flappybird_assets/background/background_6.png Binary files differindex 36adcec..36adcec 100644 --- a/assets/background/background_6.png +++ b/assets/flappybird_assets/background/background_6.png diff --git a/assets/player/bird_1.png b/assets/flappybird_assets/player/bird_1.png Binary files differindex 92abb54..92abb54 100644 --- a/assets/player/bird_1.png +++ b/assets/flappybird_assets/player/bird_1.png diff --git a/assets/player/bird_2.png b/assets/flappybird_assets/player/bird_2.png Binary files differindex 387250a..387250a 100644 --- a/assets/player/bird_2.png +++ b/assets/flappybird_assets/player/bird_2.png diff --git a/assets/player/bird_3.png b/assets/flappybird_assets/player/bird_3.png Binary files differindex 5841b43..5841b43 100644 --- a/assets/player/bird_3.png +++ b/assets/flappybird_assets/player/bird_3.png 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 Binary files differindex df1eb20..df1eb20 100644 --- a/assets/tileset/style_1/old_style_2.png +++ b/assets/flappybird_assets/tileset/style_1/old_style_2.png diff --git a/assets/tileset/style_1/pipe_style_1.png b/assets/flappybird_assets/tileset/style_1/pipe_style_1.png Binary files differindex e101469..e101469 100644 --- a/assets/tileset/style_1/pipe_style_1.png +++ b/assets/flappybird_assets/tileset/style_1/pipe_style_1.png diff --git a/assets/tileset/style_1/tile_style_1.png b/assets/flappybird_assets/tileset/style_1/tile_style_1.png Binary files differindex 944f908..944f908 100644 --- a/assets/tileset/style_1/tile_style_1.png +++ b/assets/flappybird_assets/tileset/style_1/tile_style_1.png diff --git a/assets/tileset/style_2/old_style_2.png b/assets/flappybird_assets/tileset/style_2/old_style_2.png Binary files differindex 6640972..6640972 100644 --- a/assets/tileset/style_2/old_style_2.png +++ b/assets/flappybird_assets/tileset/style_2/old_style_2.png diff --git a/assets/tileset/style_2/pipe_style_2.png b/assets/flappybird_assets/tileset/style_2/pipe_style_2.png Binary files differindex 281a0ca..281a0ca 100644 --- a/assets/tileset/style_2/pipe_style_2.png +++ b/assets/flappybird_assets/tileset/style_2/pipe_style_2.png diff --git a/assets/tileset/style_2/tile_style_2.png b/assets/flappybird_assets/tileset/style_2/tile_style_2.png Binary files differindex 2916be0..2916be0 100644 --- a/assets/tileset/style_2/tile_style_2.png +++ b/assets/flappybird_assets/tileset/style_2/tile_style_2.png diff --git a/assets/tileset/style_3/old_style_3.png b/assets/flappybird_assets/tileset/style_3/old_style_3.png Binary files differindex e68df1e..e68df1e 100644 --- a/assets/tileset/style_3/old_style_3.png +++ b/assets/flappybird_assets/tileset/style_3/old_style_3.png diff --git a/assets/tileset/style_3/pipe_style_3.png b/assets/flappybird_assets/tileset/style_3/pipe_style_3.png Binary files differindex 810d70e..810d70e 100644 --- a/assets/tileset/style_3/pipe_style_3.png +++ b/assets/flappybird_assets/tileset/style_3/pipe_style_3.png diff --git a/assets/tileset/style_3/tile_style_3.png b/assets/flappybird_assets/tileset/style_3/tile_style_3.png Binary files differindex 157fc30..157fc30 100644 --- a/assets/tileset/style_3/tile_style_3.png +++ b/assets/flappybird_assets/tileset/style_3/tile_style_3.png diff --git a/assets/icon.aseprite b/assets/icon.aseprite Binary files differnew file mode 100644 index 0000000..07271a8 --- /dev/null +++ b/assets/icon.aseprite diff --git a/assets/icon.ico b/assets/icon.ico Binary files differnew file mode 100644 index 0000000..9abb618 --- /dev/null +++ b/assets/icon.ico diff --git a/assets/icon.png b/assets/icon.png Binary files differnew file mode 100644 index 0000000..970aa14 --- /dev/null +++ b/assets/icon.png 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 Binary files differnew file mode 100644 index 0000000..2db4832 --- /dev/null +++ b/src/fonts/Silver.ttf 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 Binary files differnew file mode 100644 index 0000000..9abb618 --- /dev/null +++ b/src/icons/game.ico diff --git a/src/icons/game.png b/src/icons/game.png Binary files differindex c98fbb6..970aa14 100644 --- a/src/icons/game.png +++ b/src/icons/game.png 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) |