From 7e6ca485ecc7148ad4392dc20550f71cd0947426 Mon Sep 17 00:00:00 2001 From: Chris Racioppo Date: Sun, 21 Nov 2021 23:37:01 -0500 Subject: [PATCH 1/4] Creating expanding parallax layer --- assets/forest/forestback-1.png.import | 2 +- assets/forest/forestback-2.png.import | 2 +- assets/forest/forestback-3.png.import | 2 +- assets/forest/treetop.png.import | 2 +- project.godot | 8 +++++- src/Level/ExpandingParallaxLayer.gd | 38 +++++++++++++++++++++++++++ src/Level/SpriteSpawner.gd | 1 + src/Level/TreeBackground.tscn | 15 ++++++++--- 8 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 src/Level/ExpandingParallaxLayer.gd diff --git a/assets/forest/forestback-1.png.import b/assets/forest/forestback-1.png.import index 388dbca..975d314 100644 --- a/assets/forest/forestback-1.png.import +++ b/assets/forest/forestback-1.png.import @@ -19,7 +19,7 @@ compress/lossy_quality=0.7 compress/hdr_mode=0 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 +flags/repeat=1 flags/filter=false flags/mipmaps=false flags/anisotropic=false diff --git a/assets/forest/forestback-2.png.import b/assets/forest/forestback-2.png.import index 9039dc5..6910132 100644 --- a/assets/forest/forestback-2.png.import +++ b/assets/forest/forestback-2.png.import @@ -19,7 +19,7 @@ compress/lossy_quality=0.7 compress/hdr_mode=0 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 +flags/repeat=1 flags/filter=false flags/mipmaps=false flags/anisotropic=false diff --git a/assets/forest/forestback-3.png.import b/assets/forest/forestback-3.png.import index 712aef2..f89543e 100644 --- a/assets/forest/forestback-3.png.import +++ b/assets/forest/forestback-3.png.import @@ -19,7 +19,7 @@ compress/lossy_quality=0.7 compress/hdr_mode=0 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 +flags/repeat=1 flags/filter=false flags/mipmaps=false flags/anisotropic=false diff --git a/assets/forest/treetop.png.import b/assets/forest/treetop.png.import index 5e05178..c9c53e2 100644 --- a/assets/forest/treetop.png.import +++ b/assets/forest/treetop.png.import @@ -19,7 +19,7 @@ compress/lossy_quality=0.7 compress/hdr_mode=0 compress/bptc_ldr=0 compress/normal_map=0 -flags/repeat=0 +flags/repeat=1 flags/filter=false flags/mipmaps=false flags/anisotropic=false diff --git a/project.godot b/project.godot index 886506f..09a1ec6 100644 --- a/project.godot +++ b/project.godot @@ -9,6 +9,11 @@ config_version=4 _global_script_classes=[ { +"base": "ParallaxLayer", +"class": "ExpandingParallaxLayer", +"language": "GDScript", +"path": "res://src/Level/ExpandingParallaxLayer.gd" +}, { "base": "Sprite", "class": "MovingSprite", "language": "GDScript", @@ -40,6 +45,7 @@ _global_script_classes=[ { "path": "res://src/Weapons/Weapon.gd" } ] _global_script_class_icons={ +"ExpandingParallaxLayer": "", "MovingSprite": "", "Obstacle": "", "Player": "", @@ -64,7 +70,7 @@ window/size/width=640 window/size/height=480 window/dpi/allow_hidpi=true window/stretch/mode="viewport" -window/stretch/aspect="keep" +window/stretch/aspect="keep_height" [input] diff --git a/src/Level/ExpandingParallaxLayer.gd b/src/Level/ExpandingParallaxLayer.gd new file mode 100644 index 0000000..f729974 --- /dev/null +++ b/src/Level/ExpandingParallaxLayer.gd @@ -0,0 +1,38 @@ +extends ParallaxLayer +class_name ExpandingParallaxLayer + + +func _ready() -> void: + expand_children() + var connected := get_tree().root.connect("size_changed", self, "_on_viewport_size_changed") + if connected != OK: + push_warning("Could not connect viewport size changed") + + +func _on_viewport_size_changed() -> void: + expand_children() + + +func expand_children() -> void: + var current_size := get_viewport().size + var largest_mirror := 0.0 + for child in get_children(): + if child is Sprite: + var sprite_child: Sprite = child + var sprite_child_size := sprite_child.texture.get_size() + # Get the total sprites that will fit on screen size rounded up + var sprite_count := Vector2(int(ceil(current_size.x / sprite_child_size.x)), 1) + var wanted_size := sprite_count * sprite_child_size + sprite_child.region_enabled = true + sprite_child.region_rect.size = wanted_size + largest_mirror = max(largest_mirror, wanted_size.x) + elif child is TextureRect: + var texture_child: TextureRect = child + # Get the total textures that will fit on screen size rounded up + var texture_count := Vector2(int(ceil(current_size.x / texture_child.rect_size.x)), 1) + var wanted_size := texture_count * texture_child.rect_size + texture_child.stretch_mode = TextureRect.STRETCH_TILE + texture_child.rect_size = wanted_size + largest_mirror = max(largest_mirror, wanted_size.x) + # Set the mirror to the largest sprite/texture found + motion_mirroring.x = largest_mirror diff --git a/src/Level/SpriteSpawner.gd b/src/Level/SpriteSpawner.gd index 8ae19cd..bbbfd5e 100644 --- a/src/Level/SpriteSpawner.gd +++ b/src/Level/SpriteSpawner.gd @@ -40,6 +40,7 @@ func spawn_random_sprite() -> void: if floor_raycast.is_colliding() else global_position ) + floor_position.x = get_viewport().size.x + sprite_size.x sprite.global_position = floor_position diff --git a/src/Level/TreeBackground.tscn b/src/Level/TreeBackground.tscn index 60bcfdd..7820c70 100644 --- a/src/Level/TreeBackground.tscn +++ b/src/Level/TreeBackground.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=25 format=2] +[gd_scene load_steps=26 format=2] [ext_resource path="res://src/Level/TreeBackground.gd" type="Script" id=1] [ext_resource path="res://assets/forest/treetop.png" type="Texture" id=2] @@ -22,6 +22,7 @@ [ext_resource path="res://assets/forest/foliage-1.png" type="Texture" id=20] [ext_resource path="res://assets/forest/foliage-3.png" type="Texture" id=21] [ext_resource path="res://assets/forest/foliage-4.png" type="Texture" id=22] +[ext_resource path="res://src/Level/ExpandingParallaxLayer.gd" type="Script" id=23] [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 640, 68 ) @@ -35,13 +36,18 @@ extents = Vector2( 32, 240 ) scroll_limit_end = Vector2( 0, 480 ) script = ExtResource( 1 ) -[node name="Background" type="Sprite" parent="ParallaxBackground"] +[node name="Background" type="TextureRect" parent="ParallaxBackground"] +anchor_right = 1.0 texture = ExtResource( 8 ) -centered = false +stretch_mode = 2 +__meta__ = { +"_edit_use_anchors_": false +} [node name="FarTrees" type="ParallaxLayer" parent="ParallaxBackground"] motion_scale = Vector2( 0.1, 0.1 ) motion_mirroring = Vector2( 640, 0 ) +script = ExtResource( 23 ) [node name="Sprite" type="Sprite" parent="ParallaxBackground/FarTrees"] texture = ExtResource( 5 ) @@ -50,6 +56,7 @@ centered = false [node name="MidTrees" type="ParallaxLayer" parent="ParallaxBackground"] motion_scale = Vector2( 0.25, 0.25 ) motion_mirroring = Vector2( 640, 0 ) +script = ExtResource( 23 ) [node name="Sprite" type="Sprite" parent="ParallaxBackground/MidTrees"] texture = ExtResource( 6 ) @@ -60,6 +67,7 @@ position = Vector2( 832, 320 ) [node name="TreeTops" type="ParallaxLayer" parent="ParallaxBackground"] motion_mirroring = Vector2( 640, 0 ) +script = ExtResource( 23 ) [node name="Sprite" type="Sprite" parent="ParallaxBackground/TreeTops"] texture = ExtResource( 2 ) @@ -79,6 +87,7 @@ max_spawn_time = 2.0 [node name="Ground" type="ParallaxLayer" parent="ParallaxBackground"] motion_mirroring = Vector2( 640, 0 ) +script = ExtResource( 23 ) [node name="TextureRect" type="TextureRect" parent="ParallaxBackground/Ground"] margin_top = 336.0 From bf8b7eeac44bb38ea699ab5ad233e338deea750c Mon Sep 17 00:00:00 2001 From: Chris Racioppo Date: Sun, 21 Nov 2021 23:37:16 -0500 Subject: [PATCH 2/4] Correcting menu bug --- src/GUI/GameGUI.tscn | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/GUI/GameGUI.tscn b/src/GUI/GameGUI.tscn index 4934c6c..a9d7cae 100644 --- a/src/GUI/GameGUI.tscn +++ b/src/GUI/GameGUI.tscn @@ -84,9 +84,7 @@ margin_bottom = 38.0 layer = 100 [node name="PauseMenu" parent="CanvasLayer" instance=ExtResource( 4 )] -visible = false [node name="MainMenu" parent="CanvasLayer" instance=ExtResource( 6 )] -visible = false [node name="GameOverMenu" parent="CanvasLayer" instance=ExtResource( 8 )] From 93ad41095ee46a0ee00cdf87f962a3b0a83b9a60 Mon Sep 17 00:00:00 2001 From: Chris Racioppo Date: Sun, 21 Nov 2021 23:55:48 -0500 Subject: [PATCH 3/4] Changing obstacles to spawn at edge of screen --- src/Level/TreeBackground.tscn | 4 ++-- src/Objects/ObstacleSpawner.gd | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Level/TreeBackground.tscn b/src/Level/TreeBackground.tscn index 7820c70..a1f1973 100644 --- a/src/Level/TreeBackground.tscn +++ b/src/Level/TreeBackground.tscn @@ -25,7 +25,7 @@ [ext_resource path="res://src/Level/ExpandingParallaxLayer.gd" type="Script" id=23] [sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 640, 68 ) +extents = Vector2( 50000, 68 ) [sub_resource type="RectangleShape2D" id=2] extents = Vector2( 32, 240 ) @@ -124,7 +124,7 @@ collision_layer = 4 collision_mask = 7 [node name="CollisionShape2D" type="CollisionShape2D" parent="Floor"] -position = Vector2( 640, 412 ) +position = Vector2( 50000, 412 ) shape = SubResource( 1 ) [node name="Wall" type="StaticBody2D" parent="."] diff --git a/src/Objects/ObstacleSpawner.gd b/src/Objects/ObstacleSpawner.gd index 66be2be..22a30fe 100644 --- a/src/Objects/ObstacleSpawner.gd +++ b/src/Objects/ObstacleSpawner.gd @@ -26,6 +26,7 @@ func spawn_random_obstacle() -> void: if floor_raycast.is_colliding() else global_position ) + floor_position.x = get_viewport().size.x obstacle.global_position = floor_position From 42e1df1c391306f0aec31cd02c289a99feba41ed Mon Sep 17 00:00:00 2001 From: Chris Racioppo Date: Mon, 22 Nov 2021 00:10:17 -0500 Subject: [PATCH 4/4] Added touchscreen buttons --- src/GUI/GameGUI.tscn | 35 ++++++++++++++++++++++++++++++++++- src/GUI/GameOverMenu.gd | 1 + src/GUI/MainMenu.gd | 1 + 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/GUI/GameGUI.tscn b/src/GUI/GameGUI.tscn index a9d7cae..ea966df 100644 --- a/src/GUI/GameGUI.tscn +++ b/src/GUI/GameGUI.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=10 format=2] [ext_resource path="res://src/GUI/HealthGUI.tscn" type="PackedScene" id=1] [ext_resource path="res://src/GUI/AmmoGUI.tscn" type="PackedScene" id=2] @@ -8,6 +8,7 @@ [ext_resource path="res://src/GUI/MainMenu.tscn" type="PackedScene" id=6] [ext_resource path="res://src/GUI/ScoreGUI.tscn" type="PackedScene" id=7] [ext_resource path="res://src/GUI/GameOverMenu.tscn" type="PackedScene" id=8] +[ext_resource path="res://icon.png" type="Texture" id=9] [node name="GameGUI" type="Control"] anchor_right = 1.0 @@ -88,3 +89,35 @@ layer = 100 [node name="MainMenu" parent="CanvasLayer" instance=ExtResource( 6 )] [node name="GameOverMenu" parent="CanvasLayer" instance=ExtResource( 8 )] + +[node name="MobileButtons" type="CanvasLayer" parent="."] +layer = 101 + +[node name="JumpButton" type="TouchScreenButton" parent="MobileButtons"] +modulate = Color( 0, 1, 0, 0.392157 ) +position = Vector2( 32, 384 ) +normal = ExtResource( 9 ) +action = "jump" +visibility_mode = 1 + +[node name="RightAlignment" type="Control" parent="MobileButtons"] +anchor_left = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="AttackButton" type="TouchScreenButton" parent="MobileButtons/RightAlignment"] +modulate = Color( 1, 0, 0, 0.392157 ) +position = Vector2( -96, 384 ) +normal = ExtResource( 9 ) +action = "attack" +visibility_mode = 1 + +[node name="PauseButton" type="TouchScreenButton" parent="MobileButtons/RightAlignment"] +modulate = Color( 0, 0, 1, 0.392157 ) +position = Vector2( -80, 16 ) +normal = ExtResource( 9 ) +action = "pause" +visibility_mode = 1 diff --git a/src/GUI/GameOverMenu.gd b/src/GUI/GameOverMenu.gd index 4095ab5..63c47e6 100644 --- a/src/GUI/GameOverMenu.gd +++ b/src/GUI/GameOverMenu.gd @@ -16,6 +16,7 @@ func _input(event: InputEvent) -> void: event.is_action_pressed("attack") or event.is_action_pressed("jump") or event.is_action_pressed("pause") + or event is InputEventMouseButton ): get_tree().set_input_as_handled() hide() diff --git a/src/GUI/MainMenu.gd b/src/GUI/MainMenu.gd index cb5366c..eaba2a9 100644 --- a/src/GUI/MainMenu.gd +++ b/src/GUI/MainMenu.gd @@ -10,6 +10,7 @@ func _input(event: InputEvent) -> void: event.is_action_pressed("attack") or event.is_action_pressed("jump") or event.is_action_pressed("pause") + or event is InputEventMouseButton ): get_tree().set_input_as_handled() hide()