diff --git a/Enemies/Glowing Ghost.gd b/Enemies/Glowing Ghost.gd index 393bbe2..2825b5c 100644 --- a/Enemies/Glowing Ghost.gd +++ b/Enemies/Glowing Ghost.gd @@ -7,21 +7,21 @@ var velocity: Vector2 = Vector2.ZERO func _physics_process(_delta: float) -> void: - velocity = Vector2.ZERO + velocity = Vector2.ZERO - if player: - velocity = position.direction_to(player.position).normalized() * SPEED + if player: + velocity = position.direction_to(player.position).normalized() * SPEED - velocity = move_and_slide(velocity) - return + velocity = move_and_slide(velocity) + return func _on_player_detector_area_entered(area: Area2D) -> void: - if area.get_parent().name == 'Player': - player = area.get_parent() - return + if area.get_parent().name == 'Player': + player = area.get_parent() + return func _on_player_detector_area_exited(_area: Area2D): - player = null - return + player = null + return diff --git a/Enemies/Glowing Ghost.tscn b/Enemies/Glowing Ghost.tscn index 9d2ba8c..78e26a0 100644 --- a/Enemies/Glowing Ghost.tscn +++ b/Enemies/Glowing Ghost.tscn @@ -12,9 +12,7 @@ height = 2.0 [sub_resource type="CircleShape2D" id=2] radius = 50.0 -[node name="Glowing Ghost" type="KinematicBody2D" groups=[ -"enemies", -]] +[node name="Glowing Ghost" type="KinematicBody2D" groups=["enemies"]] collision_layer = 2 script = ExtResource( 4 ) @@ -29,10 +27,10 @@ position = Vector2( 0, -3 ) shape = SubResource( 1 ) [node name="Player Detector" type="Area2D" parent="."] -input_pickable = false -monitorable = false collision_layer = 0 collision_mask = 2 +input_pickable = false +monitorable = false [node name="CollisionShape2D" type="CollisionShape2D" parent="Player Detector"] visible = false diff --git a/Enemies/snowball_blue.gd b/Enemies/Snowball Blue.gd similarity index 100% rename from Enemies/snowball_blue.gd rename to Enemies/Snowball Blue.gd diff --git a/Enemies/snowball_blue.tscn b/Enemies/Snowball Blue.tscn similarity index 62% rename from Enemies/snowball_blue.tscn rename to Enemies/Snowball Blue.tscn index cfe3f2b..3f0fc1f 100644 --- a/Enemies/snowball_blue.tscn +++ b/Enemies/Snowball Blue.tscn @@ -1,20 +1,18 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://Sprites/Enemies/blue_snowball.png" type="Texture" id=1] -[ext_resource path="res://Enemies/snowball.gd" type="Script" id=2] +[ext_resource path="res://Enemies/Snowball.gd" type="Script" id=1] +[ext_resource path="res://Sprites/Enemies/blue_snowball.png" type="Texture" id=2] [sub_resource type="CircleShape2D" id=1] radius = 4.47823 -[node name="snowball_blue" type="Area2D" groups=[ -"enemies", -]] +[node name="snowball_blue" type="Area2D" groups=["damage"]] collision_layer = 2 -script = ExtResource( 2 ) +script = ExtResource( 1 ) [node name="Sprite" type="Sprite" parent="."] position = Vector2( 0, -2 ) -texture = ExtResource( 1 ) +texture = ExtResource( 2 ) [node name="snowball_blue" type="CollisionShape2D" parent="."] shape = SubResource( 1 ) diff --git a/Enemies/Snowman Enemy Blue.gd b/Enemies/Snowman Enemy Blue.gd new file mode 100644 index 0000000..4cba42d --- /dev/null +++ b/Enemies/Snowman Enemy Blue.gd @@ -0,0 +1,52 @@ +extends KinematicBody2D + +onready var SNOWBALL_BLUE_SCENE = preload("res://Enemies/Snowball Blue.tscn") + +var player = null +var move = Vector2.ZERO +var speed = 1 + +func _physics_process(delta: float) -> void: + move = Vector2.ZERO + + if player != null: + move = position.direction_to(player.position) * speed + else: + move = Vector2.ZERO + + move = move.normalized() + move = move_and_collide(move) + + + +func _on_Area2D_body_entered(body: Node) -> void: + if body != self && !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")): + player = body + + +func _on_Area2D_body_exited(body: Node) -> void: + if !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")): + player = null + + +func fire(): + var snowball = SNOWBALL_BLUE_SCENE.instance() + snowball.position = get_global_position() + snowball.player = player + get_parent().add_child(snowball) + $Timer.set_wait_time(1) + + +func _on_Timer_timeout() -> void: + if player != null: + fire() + +func _on_player_detector_area_entered(area: Area2D) -> void: + if area.get_parent().name == 'Player': + player = area.get_parent() + return + + +func _on_player_detector_area_exited(_area: Area2D): + player = null + return diff --git a/Enemies/snowmen_enemy_blue.tscn b/Enemies/Snowman Enemy Blue.tscn similarity index 92% rename from Enemies/snowmen_enemy_blue.tscn rename to Enemies/Snowman Enemy Blue.tscn index 8a0d1ac..b3dcfc9 100644 --- a/Enemies/snowmen_enemy_blue.tscn +++ b/Enemies/Snowman Enemy Blue.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=5 format=2] [ext_resource path="res://Sprites/Enemies/blue_snowman.png" type="Texture" id=1] -[ext_resource path="res://Enemies/snowmen_enemy.gd" type="Script" id=2] +[ext_resource path="res://Enemies/Snowman Enemy.gd" type="Script" id=2] [sub_resource type="CapsuleShape2D" id=1] radius = 6.0 @@ -22,7 +22,7 @@ position = Vector2( 0.556812, 0.44545 ) shape = SubResource( 1 ) [node name="detection" type="Area2D" parent="."] -collision_layer = 2 +collision_layer = 0 collision_mask = 2 [node name="detection" type="CollisionShape2D" parent="detection"] diff --git a/Enemies/Snowman Enemy.gd b/Enemies/Snowman Enemy.gd new file mode 100644 index 0000000..ade9782 --- /dev/null +++ b/Enemies/Snowman Enemy.gd @@ -0,0 +1,53 @@ +extends KinematicBody2D + +onready var SNOWBALL_SCENE = preload("res://Enemies/Snowball.tscn") + +var player = null +var move = Vector2.ZERO +var speed = .5 + +func _physics_process(delta: float) -> void: + move = Vector2.ZERO + + if player != null: + move = position.direction_to(player.position) * speed + else: + move = Vector2.ZERO + + move = move.normalized() + move = move_and_collide(move) + + + +func _on_Area2D_body_entered(body: Node) -> void: + if body != self && !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")): + player = body + + +func _on_Area2D_body_exited(body: Node) -> void: + if !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")): + player = null + + +func fire(): + var snowball = SNOWBALL_SCENE.instance() + snowball.position = get_global_position() + snowball.player = player + get_parent().add_child(snowball) + $Timer.set_wait_time(1) + + +func _on_Timer_timeout() -> void: + if player != null: + fire() + + +func _on_player_detector_area_entered(area: Area2D) -> void: + if area.get_parent().name == 'Player': + player = area.get_parent() + return + + +func _on_player_detector_area_exited(_area: Area2D): + player = null + return diff --git a/Enemies/snowmen_enemy.tscn b/Enemies/Snowman Enemy.tscn similarity index 92% rename from Enemies/snowmen_enemy.tscn rename to Enemies/Snowman Enemy.tscn index abffaa3..906b1d0 100644 --- a/Enemies/snowmen_enemy.tscn +++ b/Enemies/Snowman Enemy.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=5 format=2] [ext_resource path="res://Sprites/Enemies/pink_snowman.png" type="Texture" id=1] -[ext_resource path="res://Enemies/snowmen_enemy.gd" type="Script" id=2] +[ext_resource path="res://Enemies/Snowman Enemy.gd" type="Script" id=2] [sub_resource type="CapsuleShape2D" id=1] radius = 6.0 @@ -21,7 +21,7 @@ texture = ExtResource( 1 ) shape = SubResource( 1 ) [node name="detection" type="Area2D" parent="."] -collision_layer = 2 +collision_layer = 0 collision_mask = 2 [node name="detection" type="CollisionShape2D" parent="detection"] diff --git a/Enemies/snowball.gd b/Enemies/snowball.gd index 6e596bb..50b986d 100644 --- a/Enemies/snowball.gd +++ b/Enemies/snowball.gd @@ -8,16 +8,16 @@ var speed = 3 func _ready(): - look_vec = player.position - position + look_vec = player.position - position func _physics_process(delta): - move = Vector2.ZERO - move = move.move_toward(look_vec, delta) - move = move.normalized() * speed - position += move - + move = Vector2.ZERO + move = move.move_toward(look_vec, delta) + move = move.normalized() * speed + position += move - #position = position.move_toward(look_vec, delta).normalized() * SPEED + + #position = position.move_toward(look_vec, delta).normalized() * SPEED diff --git a/Enemies/snowball.tscn b/Enemies/snowball.tscn index a39bce3..24237a9 100644 --- a/Enemies/snowball.tscn +++ b/Enemies/snowball.tscn @@ -1,17 +1,19 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://Sprites/Enemies/pink_snowball.png" type="Texture" id=1] -[ext_resource path="res://Enemies/snowball.gd" type="Script" id=2] +[ext_resource path="res://Enemies/Snowball.gd" type="Script" id=1] +[ext_resource path="res://Sprites/Enemies/pink_snowball.png" type="Texture" id=2] [sub_resource type="CircleShape2D" id=1] radius = 4.47823 -[node name="snowball" type="Area2D"] +[node name="snowball" type="Area2D" groups=["damage"]] collision_layer = 2 -script = ExtResource( 2 ) +collision_mask = 0 +monitoring = false +script = ExtResource( 1 ) [node name="Sprite" type="Sprite" parent="."] -texture = ExtResource( 1 ) +texture = ExtResource( 2 ) [node name="snowball" type="CollisionShape2D" parent="."] position = Vector2( -0.00869751, -0.0361767 ) diff --git a/Enemies/snowmen_enemy.gd b/Enemies/snowmen_enemy.gd deleted file mode 100644 index 39479cb..0000000 --- a/Enemies/snowmen_enemy.gd +++ /dev/null @@ -1,53 +0,0 @@ -extends KinematicBody2D - -onready var SNOWBALL_SCENE = preload("res://Enemies/snowball.tscn") - -var player = null -var move = Vector2.ZERO -var speed = .5 - -func _physics_process(delta: float) -> void: - move = Vector2.ZERO - - if player != null: - move = position.direction_to(player.position) * speed - else: - move = Vector2.ZERO - - move = move.normalized() - move = move_and_collide(move) - - - -func _on_Area2D_body_entered(body: Node) -> void: - if body != self && !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")): - player = body - - -func _on_Area2D_body_exited(body: Node) -> void: - if !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")): - player = null - - -func fire(): - var snowball = SNOWBALL_SCENE.instance() - snowball.position = get_global_position() - snowball.player = player - get_parent().add_child(snowball) - $Timer.set_wait_time(1) - - -func _on_Timer_timeout() -> void: - if player != null: - fire() - - -func _on_player_detector_area_entered(area: Area2D) -> void: - if area.get_parent().name == 'Player': - player = area.get_parent() - return - - -func _on_player_detector_area_exited(_area: Area2D): - player = null - return diff --git a/Enemies/snowmen_enemy_blue.gd b/Enemies/snowmen_enemy_blue.gd deleted file mode 100644 index e1dc929..0000000 --- a/Enemies/snowmen_enemy_blue.gd +++ /dev/null @@ -1,52 +0,0 @@ -extends KinematicBody2D - -onready var SNOWBALL_BLUE_SCENE = preload("res://Enemies/snowball_blue.tscn") - -var player = null -var move = Vector2.ZERO -var speed = 1 - -func _physics_process(delta: float) -> void: - move = Vector2.ZERO - - if player != null: - move = position.direction_to(player.position) * speed - else: - move = Vector2.ZERO - - move = move.normalized() - move = move_and_collide(move) - - - -func _on_Area2D_body_entered(body: Node) -> void: - if body != self && !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")): - player = body - - -func _on_Area2D_body_exited(body: Node) -> void: - if !(body.name.begins_with("tree")) && !(body.name.begins_with("snowmen_enemy")) && !(body.name.begins_with("wall")): - player = null - - -func fire(): - var snowball = SNOWBALL_BLUE_SCENE.instance() - snowball.position = get_global_position() - snowball.player = player - get_parent().add_child(snowball) - $Timer.set_wait_time(1) - - -func _on_Timer_timeout() -> void: - if player != null: - fire() - -func _on_player_detector_area_entered(area: Area2D) -> void: - if area.get_parent().name == 'Player': - player = area.get_parent() - return - - -func _on_player_detector_area_exited(_area: Area2D): - player = null - return diff --git a/GUI/Countdown Timer.gd b/GUI/Countdown Timer.gd new file mode 100644 index 0000000..f3f0857 --- /dev/null +++ b/GUI/Countdown Timer.gd @@ -0,0 +1,7 @@ +extends Label + + +func _process(delta: float) -> void: + var time_seconds: int = int($Timer.get_time_left()) + set_text('%02d:%02d' % [time_seconds, int(($Timer.get_time_left() - time_seconds) * 100)]) + return diff --git a/GUI/Countdown Timer.tscn b/GUI/Countdown Timer.tscn new file mode 100644 index 0000000..144dff5 --- /dev/null +++ b/GUI/Countdown Timer.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://GUI/Countdown Timer.gd" type="Script" id=1] +[ext_resource path="res://Fonts/AtariClassic.ttf" type="DynamicFontData" id=2] + +[sub_resource type="DynamicFont" id=1] +size = 40 +font_data = ExtResource( 2 ) + +[node name="Countdown Timer" type="Label"] +margin_left = 135.0 +margin_top = 1.0 +margin_right = 335.0 +margin_bottom = 41.0 +rect_min_size = Vector2( 200, 0 ) +rect_scale = Vector2( 0.25, 0.25 ) +custom_colors/font_color = Color( 0, 0, 0, 1 ) +custom_fonts/font = SubResource( 1 ) +align = 1 +script = ExtResource( 1 ) +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Timer" type="Timer" parent="."] +wait_time = 60.0 +one_shot = true +autostart = true diff --git a/GUI/Main Menu.gd b/GUI/Main Menu.gd index f003653..dbfe113 100644 --- a/GUI/Main Menu.gd +++ b/GUI/Main Menu.gd @@ -4,36 +4,36 @@ signal complete(option) func _on_new_game_button_pressed() -> void: - emit_signal('complete', 'new game') - return + emit_signal('complete', 'new game') + return func _on_quit_button_pressed() -> void: - get_tree().quit() - return + get_tree().quit() + return func _on_continue_button_mouse_entered() -> void: - if not $'Menu/Menu Elements/Menu Options/Continue/Continue Button'.disabled: - $'Menu Button Hover'.play(0.0) - return + if not $'Menu/Menu Elements/Menu Options/Continue/Continue Button'.disabled: + $'Menu Button Hover'.play(0.0) + return func _on_new_game_button_mouse_entered() -> void: - $'Menu Button Hover'.play(0.0) - return + $'Menu Button Hover'.play(0.0) + return func _on_settings_button_mouse_entered() -> void: - $'Menu Button Hover'.play(0.0) - return + $'Menu Button Hover'.play(0.0) + return func _on_credits_button_mouse_entered() -> void: - $'Menu Button Hover'.play(0.0) - return + $'Menu Button Hover'.play(0.0) + return func _on_quit_button_mouse_entered() -> void: - $'Menu Button Hover'.play(0.0) - return + $'Menu Button Hover'.play(0.0) + return diff --git a/Levels/Interactives/Countdown.gd b/Levels/Interactives/Countdown.gd deleted file mode 100644 index a020295..0000000 --- a/Levels/Interactives/Countdown.gd +++ /dev/null @@ -1,27 +0,0 @@ -extends Control - -export (int) var minutes =0 -export (int) var seconds = 0 -var dsec = 0 - -func _physics_process(delta: float) -> void: - if seconds > 0 and dsec <= 0: - seconds -=1 - dsec = 10 - if minutes > 0 and seconds <= 0: - minutes -= 1 - seconds = 60 - - if seconds >= 10: - $sec.set_text(str(seconds)) - else: - $sec.set_text("0"+str(seconds)) - - if dsec >=10: - $dsec.set_text(str(dsec)) - else: - $dsec.set_text("0" + str(dsec)) - -func _on_Timer_timeout() -> void: - dsec-=1 - pass # Replace with function body. diff --git a/Levels/Interactives/coin.gd b/Levels/Interactives/coin.gd index 6d6ab09..c331865 100644 --- a/Levels/Interactives/coin.gd +++ b/Levels/Interactives/coin.gd @@ -1,10 +1,9 @@ extends Area2D -func _ready() -> void: - pass # Replace with function body. - +signal coin_collected func _on_Node2D_body_entered(body: Node) -> void: - if body.get_name() == "Player": - queue_free() # Replace with function body. + if body.get_name() == 'Player': + emit_signal('coin_collected') + queue_free() diff --git a/Levels/Interactives/coin.tscn b/Levels/Interactives/coin.tscn index 35be423..4b9d139 100644 --- a/Levels/Interactives/coin.tscn +++ b/Levels/Interactives/coin.tscn @@ -1,20 +1,19 @@ [gd_scene load_steps=4 format=2] -[ext_resource path="res://Sprites/Assets/coin.png" type="Texture" id=1] -[ext_resource path="res://Levels/Interactives/coin.gd" type="Script" id=2] +[ext_resource path="res://Levels/Interactives/Coin.gd" type="Script" id=1] +[ext_resource path="res://Sprites/Assets/coin.png" type="Texture" id=2] [sub_resource type="CircleShape2D" id=1] radius = 6.38067 [node name="coin" type="Area2D"] -script = ExtResource( 2 ) +script = ExtResource( 1 ) [node name="Sprite" type="Sprite" parent="."] -position = Vector2( 28.3217, 41.6257 ) -texture = ExtResource( 1 ) +position = Vector2( 0, 1 ) +texture = ExtResource( 2 ) [node name="coin" type="CollisionShape2D" parent="."] -position = Vector2( 28.4389, 40.6703 ) shape = SubResource( 1 ) [connection signal="body_entered" from="." to="." method="_on_Node2D_body_entered"] diff --git a/Levels/Level 3.gd b/Levels/Level 3.gd index abec301..e7c6aee 100644 --- a/Levels/Level 3.gd +++ b/Levels/Level 3.gd @@ -1,6 +1,6 @@ extends Node2D -onready var coin = preload("res://Levels/Interactives/coin.tscn") +onready var coin = preload("res://Levels/Interactives/Coin.tscn") #onready var coin_container = get_node("YSort/coin_container") #have event for timer to run out @@ -10,21 +10,15 @@ var screensize var score = 0 func _ready() -> void: - $YSort/Player.load_hud($HUD) - $YSort/Player.position = get_viewport_rect().size / 2 - randomize() - screensize = get_viewport_rect().size - set_process(true) - spawn_coins(5) - return + $YSort/Player.load_hud($HUD) + screensize = get_viewport_rect().size + spawn_coins(5) + return -func _process(delta): - if $AudioStreamPlayer.playing == false: - $AudioStreamPlayer.play() func spawn_coins(num): - for i in range(num): - var g = coin.instance() - $'YSort/coin_container'.add_child(g) - #g.set_pos(Vector2(rand_range(0, screensize.x-40), rand_range(0, screensize.y-40))) - g.position = Vector2(rand_range(0, screensize.x-40), rand_range(0, screensize.y-40)) + for i in range(num): + var g = coin.instance() + $'coin_container'.add_child(g) + #g.set_pos(Vector2(rand_range(0, screensize.x-40), rand_range(0, screensize.y-40))) + g.position = Vector2(rand_range(0, screensize.x-40), rand_range(0, screensize.y-40)) diff --git a/Levels/Level 3.tscn b/Levels/Level 3.tscn index ba1a8fb..59f3264 100644 --- a/Levels/Level 3.tscn +++ b/Levels/Level 3.tscn @@ -1,20 +1,16 @@ -[gd_scene load_steps=16 format=2] +[gd_scene load_steps=15 format=2] [ext_resource path="res://Player/Player.tscn" type="PackedScene" id=1] [ext_resource path="res://Levels/Level 3.gd" type="Script" id=2] [ext_resource path="res://Resources/tileSet.tres" type="TileSet" id=3] -[ext_resource path="res://Enemies/snowmen_enemy.tscn" type="PackedScene" id=4] -[ext_resource path="res://Sprites/Assets/forestTreeBig.png" type="Texture" id=5] -[ext_resource path="res://Enemies/snowmen_enemy_blue.tscn" type="PackedScene" id=6] -[ext_resource path="res://Enemies/snowmen_enemy_blue.gd" type="Script" id=7] -[ext_resource path="res://Levels/Interactives/Countdown.gd" type="Script" id=8] +[ext_resource path="res://Enemies/Snowman Enemy.tscn" type="PackedScene" id=4] +[ext_resource path="res://Levels/Objects/Tree.tscn" type="PackedScene" id=5] +[ext_resource path="res://Enemies/Snowman Enemy Blue.tscn" type="PackedScene" id=6] +[ext_resource path="res://Enemies/Snowman Enemy Blue.gd" type="Script" id=7] [ext_resource path="res://GUI/HUD.tscn" type="PackedScene" id=9] [ext_resource path="res://GUI/Pause Screen.tscn" type="PackedScene" id=10] [ext_resource path="res://Music/Level_3.mp3" type="AudioStream" id=11] - -[sub_resource type="CapsuleShape2D" id=1] -radius = 9.0515 -height = 0.0 +[ext_resource path="res://GUI/Countdown Timer.tscn" type="PackedScene" id=12] [sub_resource type="SegmentShape2D" id=2] a = Vector2( 3.84175, -99.0063 ) @@ -28,7 +24,7 @@ b = Vector2( 309.792, 29.724 ) a = Vector2( 369.611, 141.974 ) b = Vector2( 49.76, 142.724 ) -[node name="World" type="Node2D"] +[node name="Level 3" type="Node2D"] script = ExtResource( 2 ) [node name="TileMap" type="TileMap" parent="."] @@ -42,191 +38,93 @@ tile_data = PoolIntArray( 0, 0, 65537, 1, 0, 65538, 2, 0, 65538, 3, 0, 65538, 4, [node name="YSort" type="YSort" parent="."] [node name="Player" parent="YSort" instance=ExtResource( 1 )] -position = Vector2( 20, 26 ) +position = Vector2( 120, 60 ) ACCELERATION = 500 FRICTION = 100 -[node name="tree6" type="StaticBody2D" parent="YSort"] +[node name="Tree 1" parent="YSort" instance=ExtResource( 5 )] +position = Vector2( 35.7089, 147.785 ) -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/tree6"] -position = Vector2( 71.8801, 91.6645 ) -shape = SubResource( 1 ) +[node name="Tree 2" parent="YSort" instance=ExtResource( 5 )] +position = Vector2( 59.3969, 96.8735 ) -[node name="forestTreeBig2" type="Sprite" parent="YSort/tree6"] -position = Vector2( 72.0738, 92.0067 ) -texture = ExtResource( 5 ) +[node name="Tree 3" parent="YSort" instance=ExtResource( 5 )] +position = Vector2( 74.5997, 42.7799 ) -[node name="blue_snowman2" parent="YSort" groups=[ -"enemies", -] instance=ExtResource( 6 )] +[node name="Tree 4" parent="YSort" instance=ExtResource( 5 )] +position = Vector2( 153.442, 160.867 ) + +[node name="Tree 5" parent="YSort" instance=ExtResource( 5 )] +position = Vector2( 155.563, 93.6916 ) + +[node name="Tree 6" parent="YSort" instance=ExtResource( 5 )] +position = Vector2( 211.071, 43.1335 ) + +[node name="Tree 7" parent="YSort" instance=ExtResource( 5 )] +position = Vector2( 262.336, 86.2669 ) + +[node name="Tree 8" parent="YSort" instance=ExtResource( 5 )] +position = Vector2( 231.224, 137.179 ) + +[node name="Enemies" type="YSort" parent="YSort"] + +[node name="Snowman 1" parent="YSort/Enemies" groups=["enemies"] instance=ExtResource( 4 )] +position = Vector2( 190.316, 146.569 ) + +[node name="Snowman 2" parent="YSort/Enemies" groups=["enemies"] instance=ExtResource( 4 )] +position = Vector2( 67.4812, 153.194 ) + +[node name="Blue Snowman 1" parent="YSort/Enemies" groups=["enemies"] instance=ExtResource( 6 )] position = Vector2( 259.084, 49.7897 ) script = ExtResource( 7 ) -[node name="blue_snowman" parent="YSort" groups=[ -"enemies", -] instance=ExtResource( 6 )] +[node name="Blue Snowman 2" parent="YSort/Enemies" groups=["enemies"] instance=ExtResource( 6 )] position = Vector2( 261.1, 142.19 ) script = ExtResource( 7 ) -[node name="snowmen_enemy2" parent="YSort" groups=[ -"enemies", -] instance=ExtResource( 4 )] -position = Vector2( 190.316, 146.569 ) - -[node name="snowmen_enemy" parent="YSort" groups=[ -"enemies", -] instance=ExtResource( 4 )] -position = Vector2( 67.4812, 153.194 ) - -[node name="tree5" type="StaticBody2D" parent="YSort"] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/tree5"] -position = Vector2( 265.396, 85.2148 ) -shape = SubResource( 1 ) - -[node name="forestTreeBig" type="Sprite" parent="YSort/tree5"] -position = Vector2( 265.238, 84.0492 ) -texture = ExtResource( 5 ) - -[node name="tree8" type="StaticBody2D" parent="YSort"] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/tree8"] -position = Vector2( 85.1921, 39.1628 ) -shape = SubResource( 1 ) - -[node name="forestTreeBig5" type="Sprite" parent="YSort/tree8"] -position = Vector2( 84.7548, 38.2794 ) -texture = ExtResource( 5 ) - -[node name="tree7" type="StaticBody2D" parent="YSort"] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/tree7"] -position = Vector2( 38.4727, 145.283 ) -shape = SubResource( 1 ) - -[node name="forestTreeBig6" type="Sprite" parent="YSort/tree7"] -position = Vector2( 38.7028, 144.733 ) -texture = ExtResource( 5 ) - -[node name="tree4" type="StaticBody2D" parent="YSort"] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/tree4"] -position = Vector2( 211.334, 36.8269 ) -shape = SubResource( 1 ) - -[node name="forestTreeBig7" type="Sprite" parent="YSort/tree4"] -position = Vector2( 210.897, 36.2771 ) -texture = ExtResource( 5 ) - -[node name="tree" type="StaticBody2D" parent="YSort"] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/tree"] -position = Vector2( 235.362, 138.275 ) -shape = SubResource( 1 ) - -[node name="forestTreeBig" type="Sprite" parent="YSort/tree/CollisionShape2D"] -position = Vector2( -0.103607, -0.883423 ) -texture = ExtResource( 5 ) - -[node name="tree3" type="StaticBody2D" parent="YSort"] - -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/tree3"] -position = Vector2( 153.603, 158.631 ) -shape = SubResource( 1 ) - -[node name="forestTreeBig3" type="Sprite" parent="YSort/tree3"] -position = Vector2( 153.165, 157.748 ) -texture = ExtResource( 5 ) - -[node name="tree2" type="StaticBody2D" parent="YSort"] -position = Vector2( 2.47487, 0.707108 ) - -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/tree2"] -position = Vector2( 157.273, 93.2238 ) -shape = SubResource( 1 ) - -[node name="forestTreeBig4" type="Sprite" parent="YSort/tree2"] -position = Vector2( 156.836, 92.3404 ) -texture = ExtResource( 5 ) - -[node name="wall" type="StaticBody2D" parent="YSort"] +[node name="wall" type="StaticBody2D" parent="."] position = Vector2( -17.4614, 141.279 ) -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/wall"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="wall"] position = Vector2( 329.803, -41.5425 ) shape = SubResource( 2 ) -[node name="wall1" type="StaticBody2D" parent="YSort"] +[node name="wall1" type="StaticBody2D" parent="."] position = Vector2( 15.874, -26.1921 ) -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/wall1"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="wall1"] position = Vector2( -3.71627, -0.261772 ) shape = SubResource( 3 ) -[node name="wall2" type="StaticBody2D" parent="YSort"] +[node name="wall2" type="StaticBody2D" parent="."] position = Vector2( -7.93701, 71.8299 ) -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/wall2"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="wall2"] position = Vector2( 8.36367, 26.9858 ) shape = SubResource( 2 ) -[node name="wall3" type="StaticBody2D" parent="YSort"] +[node name="wall3" type="StaticBody2D" parent="."] position = Vector2( -49.6063, 34.526 ) -[node name="CollisionShape2D" type="CollisionShape2D" parent="YSort/wall3"] +[node name="CollisionShape2D" type="CollisionShape2D" parent="wall3"] position = Vector2( 0, -4.25 ) shape = SubResource( 4 ) -[node name="coin_container" type="Control" parent="YSort"] +[node name="coin_container" type="Control" parent="."] margin_right = 40.0 margin_bottom = 40.0 __meta__ = { "_edit_use_anchors_": false } -[node name="Countdown" type="Control" parent="."] -margin_right = 40.0 -margin_bottom = 40.0 -script = ExtResource( 8 ) -__meta__ = { -"_edit_use_anchors_": false -} -minutes = 3 - -[node name="sec" type="RichTextLabel" parent="Countdown"] -modulate = Color( 0.25098, 0.0431373, 0.411765, 1 ) -self_modulate = Color( 0.25098, 0.0431373, 0.411765, 1 ) -margin_left = 139.114 -margin_top = 5.0 -margin_right = 169.114 -margin_bottom = 26.0 -text = "00" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="dsec" type="RichTextLabel" parent="Countdown"] -modulate = Color( 0.25098, 0.0431373, 0.411765, 1 ) -self_modulate = Color( 0.25098, 0.0431373, 0.411765, 1 ) -margin_left = 158.512 -margin_top = 4.7622 -margin_right = 198.512 -margin_bottom = 44.7622 -text = "0" -__meta__ = { -"_edit_use_anchors_": false -} - -[node name="Timer" type="Timer" parent="Countdown"] -process_mode = 0 -wait_time = 0.1 -autostart = true +[node name="Countdown Timer" parent="." instance=ExtResource( 12 )] [node name="HUD" parent="." instance=ExtResource( 9 )] [node name="Pause Screen" parent="." instance=ExtResource( 10 )] -[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +[node name="BGM" type="AudioStreamPlayer" parent="."] +pause_mode = 2 stream = ExtResource( 11 ) - -[connection signal="timeout" from="Countdown/Timer" to="Countdown" method="_on_Timer_timeout"] +volume_db = -12.0 +autoplay = true diff --git a/Levels/Level 5.gd b/Levels/Level 5.gd index 5c4d9ab..06b26e7 100644 --- a/Levels/Level 5.gd +++ b/Levels/Level 5.gd @@ -2,5 +2,5 @@ extends Node2D func _ready() -> void: - $YSort/Player.load_hud($HUD) - return + $YSort/Player.load_hud($HUD) + return diff --git a/Levels/Level 5.tscn b/Levels/Level 5.tscn index c37618d..abe97fe 100644 --- a/Levels/Level 5.tscn +++ b/Levels/Level 5.tscn @@ -15,7 +15,6 @@ script = ExtResource( 2 ) [node name="CanvasModulate" type="CanvasModulate" parent="."] -visible = false color = Color( 0, 0, 0, 1 ) [node name="Floor" type="TileMap" parent="."] diff --git a/Levels/Interactives/tree.tscn b/Levels/Objects/Tree.tscn similarity index 100% rename from Levels/Interactives/tree.tscn rename to Levels/Objects/Tree.tscn diff --git a/Main.gd b/Main.gd index 3638210..1f849e5 100644 --- a/Main.gd +++ b/Main.gd @@ -7,74 +7,75 @@ export var world_path: String func _ready() -> void: - var splash_screen: Node = play_splash_screen() - yield(splash_screen, 'complete') - splash_screen = null + randomize() + var splash_screen: Node = play_splash_screen() + yield(splash_screen, 'complete') + splash_screen = null - var main_menu: Node = play_main_menu() - yield(main_menu, 'complete') - free_connected_node(main_menu, 'main_menu_option') - main_menu = null - return + var main_menu: Node = play_main_menu() + yield(main_menu, 'complete') + free_connected_node(main_menu, 'main_menu_option') + main_menu = null + return func play_splash_screen() -> Node: - var splash_screen: Node = load(splash_screen_path).instance() - if splash_screen.connect('complete', self, 'free_connected_node', - [splash_screen, 'free_connected_node']) != OK: - print('ERROR: Splash Screen "complete" signal already connected.') + var splash_screen: Node = load(splash_screen_path).instance() + if splash_screen.connect('complete', self, 'free_connected_node', + [splash_screen, 'free_connected_node']) != OK: + print('ERROR: Splash Screen "complete" signal already connected.') - add_child(splash_screen) - return splash_screen + add_child(splash_screen) + return splash_screen func play_main_menu() -> Node: - var main_menu: Node = load(main_menu_path).instance() - if main_menu.connect('complete', self, 'main_menu_option') != OK: - print('ERROR: Main Menu "complete" signal already connected.') + var main_menu: Node = load(main_menu_path).instance() + if main_menu.connect('complete', self, 'main_menu_option') != OK: + print('ERROR: Main Menu "complete" signal already connected.') - add_child(main_menu) - return main_menu + add_child(main_menu) + return main_menu func main_menu_option(option: String) -> void: - if option == 'new game': - var level_select_menu: Node = play_level_select_menu() - yield(level_select_menu, 'complete') - free_connected_node(level_select_menu, 'level_select_menu_option') - level_select_menu = null - return + if option == 'new game': + var level_select_menu: Node = play_level_select_menu() + yield(level_select_menu, 'complete') + free_connected_node(level_select_menu, 'level_select_menu_option') + level_select_menu = null + return func play_level_select_menu() -> Node: - var level_select_menu: Node = load(level_select_menu_path).instance() - if level_select_menu.connect('complete', self, 'level_select_menu_option') != OK: - print('ERROR: Level Select Menu "complete" signal already connected.') + var level_select_menu: Node = load(level_select_menu_path).instance() + if level_select_menu.connect('complete', self, 'level_select_menu_option') != OK: + print('ERROR: Level Select Menu "complete" signal already connected.') - add_child(level_select_menu) - return level_select_menu + add_child(level_select_menu) + return level_select_menu func level_select_menu_option(option: String) -> void: - var level: String = 'res://Levels/' - if option == 'H': - level += 'Hub World.tscn' - else: - level += 'Level ' + option + '.tscn' + var level: String = 'res://Levels/' + if option == 'H': + level += 'Hub World.tscn' + else: + level += 'Level ' + option + '.tscn' - new_game(level) - return + new_game(level) + return func free_connected_node(node: Node, connected_function: String) -> void: - node.disconnect('complete', self, connected_function) - remove_child(node) - node.queue_free() - return + node.disconnect('complete', self, connected_function) + remove_child(node) + node.queue_free() + return func new_game(level: String) -> void: - if get_tree().change_scene(level) != OK: - print('ERROR: Main failed to change scene to Level.') - queue_free() - return + if get_tree().change_scene(level) != OK: + print('ERROR: Main failed to change scene to Level.') + queue_free() + return diff --git a/Player/Player.gd b/Player/Player.gd index a6139fd..7a75077 100644 --- a/Player/Player.gd +++ b/Player/Player.gd @@ -12,90 +12,93 @@ var velocity: Vector2 = Vector2.ZERO func _physics_process(delta: float) -> void: - var input_vector: Vector2 = Vector2.ZERO + var input_vector: Vector2 = Vector2.ZERO - input_vector.x = Input.get_action_strength('player_right') \ - - Input.get_action_strength('player_left') - input_vector.y = Input.get_action_strength('player_down') \ - - Input.get_action_strength('player_up') - input_vector = input_vector.normalized() + input_vector.x = Input.get_action_strength('player_right') \ + - Input.get_action_strength('player_left') + input_vector.y = Input.get_action_strength('player_down') \ + - Input.get_action_strength('player_up') + input_vector = input_vector.normalized() - if input_vector != Vector2.ZERO: - $AnimationTree.set('parameters/Idle/blend_position', input_vector) - velocity = velocity.move_toward(input_vector * MAX_SPEED, ACCELERATION * delta) - else: - velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta) + if input_vector != Vector2.ZERO: + $AnimationTree.set('parameters/Idle/blend_position', input_vector) + velocity = velocity.move_toward(input_vector * MAX_SPEED, ACCELERATION * delta) + else: + velocity = velocity.move_toward(Vector2.ZERO, FRICTION * delta) - velocity = move_and_slide(velocity) - return + velocity = move_and_slide(velocity) + return func load_hud(node: CanvasLayer) -> void: - hud = node - if hud.connect('add_currency', self, 'add_currency') != OK: - print('ERROR: HUD "add_currency" signal already connected.') + hud = node + if hud.connect('add_currency', self, 'add_currency') != OK: + print('ERROR: HUD "add_currency" signal already connected.') - hud.update_health(HEALTH_SLICES[health_index]) - hud.update_currency($Inventory.get_currency()) - return + hud.update_health(HEALTH_SLICES[health_index]) + hud.update_currency($Inventory.get_currency()) + return func add_currency(amount: int) -> void: - $Inventory.add_currency(amount) - return + $Inventory.add_currency(amount) + return func _on_Inventory_update_currency(amount: int) -> void: - hud.update_currency(amount) - return + hud.update_currency(amount) + return func _on_Hitbox_body_entered(body: Node) -> void: - if not 'enemies' in body.get_groups(): - return - #var timer = Timer.new() - - elif body.name.begins_with("blue_snowman"): - MAX_SPEED = 20 - yield(get_tree().create_timer(3.0), "timeout") - MAX_SPEED = 120 + if not 'enemies' in body.get_groups(): + return + #var timer = Timer.new() - else: - health_index != 0 - health_index -= 1 - hud.update_health(HEALTH_SLICES[health_index]) - - return + elif body.name.begins_with("blue_snowman"): + MAX_SPEED = 20 + yield(get_tree().create_timer(3.0), "timeout") + MAX_SPEED = 120 + + elif health_index != 0: + health_index != 0 + health_index -= 1 + hud.update_health(HEALTH_SLICES[health_index]) + else: + get_tree().change_scene('res://Levels/Hub World.tscn') + + return func _input(event: InputEvent) -> void: - if event.is_action_pressed('screenshot'): - var img: Image = get_viewport().get_texture().get_data() - yield(get_tree(), "idle_frame") - yield(get_tree(), "idle_frame") + if event.is_action_pressed('screenshot'): + var img: Image = get_viewport().get_texture().get_data() + yield(get_tree(), "idle_frame") + yield(get_tree(), "idle_frame") - img.flip_y() + img.flip_y() - var time: Dictionary = OS.get_datetime_from_unix_time(OS.get_unix_time()) - var time_msecs: int = OS.get_system_time_msecs() + var time: Dictionary = OS.get_datetime_from_unix_time(OS.get_unix_time()) + var time_msecs: int = OS.get_system_time_msecs() - if img.save_png('user://Screenshot_%d%d%d_%d.png' % [time.year, time.month, time.day, time_msecs]) != OK: - print('ERROR: Failed saving screenshot.') - return + if img.save_png('user://Screenshot_%d%d%d_%d.png' % [time.year, time.month, time.day, time_msecs]) != OK: + print('ERROR: Failed saving screenshot.') + return func _on_Hitbox_area_entered(area: Area2D) -> void: - print(area.name) - - if area.name.begins_with("coin"): - print("COIN") - - if not 'enemies' in area.get_parent().get_groups() or area.name.begins_with("detection") or (not area.name.begins_with("snowball")) : - return + print(area.name) + if area.name.begins_with("coin"): + print("COIN") + if area.name == 'detection': + return - if health_index != 0: - health_index -= 1 - hud.update_health(HEALTH_SLICES[health_index]) - return + if 'enemies' in area.get_parent().get_groups() or area.name != 'detection' or 'damage' in area.get_groups(): + if health_index != 0: + health_index -= 1 + hud.update_health(HEALTH_SLICES[health_index]) + else: + get_tree().change_scene('res://Levels/Hub World.tscn') + return diff --git a/Sprites/Enemies/pink_snowball.png.import b/Sprites/Enemies/pink_snowball.png.import index d065125..f7c3b88 100644 --- a/Sprites/Enemies/pink_snowball.png.import +++ b/Sprites/Enemies/pink_snowball.png.import @@ -20,7 +20,7 @@ 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 @@ -31,5 +31,5 @@ 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/project.godot b/project.godot index 951352d..3f96c72 100644 --- a/project.godot +++ b/project.godot @@ -12,11 +12,11 @@ config_version=4 config/name="Embodiment" run/main_scene="res://Main.tscn" +run/delta_sync_after_draw=true boot_splash/image="res://Sprites/Assets/Black_Background.png" boot_splash/use_filter=false boot_splash/bg_color=Color( 0, 0, 0, 1 ) config/icon="res://Sprites/Assets/icon.png" -run/delta_sync_after_draw=true [display] @@ -31,27 +31,27 @@ window/stretch/aspect="keep" player_right={ "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":68,"unicode":0,"echo":false,"script":null) +"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":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } player_left={ "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":65,"unicode":0,"echo":false,"script":null) +"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":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } player_up={ "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":87,"unicode":0,"echo":false,"script":null) +"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":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } player_down={ "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":83,"unicode":0,"echo":false,"script":null) +"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":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] } screenshot={ "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":16777245,"unicode":0,"echo":false,"script":null) +"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":16777245,"physical_scancode":0,"unicode":0,"echo":false,"script":null) ] }