4 Commits
Author SHA1 Message Date
OddlyTimbot 1d82f7502d week2 prep 2026-06-29 18:14:58 -04:00
OddlyTimbot d8629e2f81 week 2 prep 2026-06-29 17:38:15 -04:00
OddlyTimbot d0819ead77 week 2 prep 2026-06-29 17:02:44 -04:00
OddlyTimbot 7824bcd6cd week 2 prep 2026-06-29 16:57:59 -04:00
37 changed files with 189 additions and 1469 deletions

No files matched your search

-105
View File
@@ -1,105 +0,0 @@
Week 4 - Environment
1. Create a second terrain for vegetation
Learn to use the tilemap layer to easily add vegetation to your level.
* Add a terrain to your terrain set zero
* Import and atlas your graphics (32x32)
* Paint terrain rules
2. Setting Display properties
Learn to set display properties to size the viewport and scale it.
Go to project settings:
Display>Window
Viewport Width 480
Viewport Height 270
This makes the viewport small, but we can now scale it up to the size we want to play at
Advanced settings: on
Window width override: 960
Window height override: 540
And finally how to handle the up-scaling
Stretch>Mode: viewport
aspect: keep
scale: 1.0
At this point you can control the scaling.
The closer the viewport setting is to the scaled size, the more of the
scene will be revealed.
You should add a camera to the player so that the viewport will show the area around them.
3. Creating a background
Create a "sky"
Create a color block the same size as your viewport (480x270)
Create a parallax2D > Add a child Sprite2D to it
Assign the graphic to be the sprite in Sprite2D
Offset the graphic in Sprite2D, 1/2 width, 1/2 height
In the parallax2D parent, set scroll scale to x:1.0 y:1.0
Repeat Size: x:480 y:270
Create a "midground" parallax2D
Scroll Scale x:1.05 y:1.0
Repeat Size x:480 y:0
Create a "foreground"
Scroll Scale x:1.1 y:1.0
Repeat Size x:480 y:0
Optional - Create a "front" parallax2D
4. Custom Graphics
Set up GIMP for creating custom pixel art
Make a background
Create a new document, set to the size of viewport (480x270)
Set up Canvas for Pixel Art
View > Show Grid
Image > Configure Grid
Spacing > 1 horizontal 1 vertical (pixels) > set foreground colour
Set up Tool for Pixel Art
Select "pencil" by click-hold on drawing tools
In tool options:
Size: 1.0
Hardness: 100
The pencil tool creates the hard edges we want in pixel art.
Saving your file as .xcf file will save your grid settings, but will not
automatically show the grid when you open the file. You will still need to
go to View > Show Grid
Turning Images into Pixel Art
When you bring in a reference image there is a good chance it will need to
have work done. A good way to get used to using reference images is to use
a silhoette image.
Get an image
Paste it as a new single layer
Scale it using the scaling tool
Use the colour picker tool to select the black
Make a new layer
Use the paint bucket tool to fill the selection (can now delete reference)
With the selection painted it will snap the paint to whole pixels, but
you will likely see some fuzzy edges because some of the pixels around edges
will be partially transparent.
You can use the colour picker tool set to "select by alpha". Now when you select
a transparent pixel, it will add all pixels with the same transparency to the
selection.
You can now use the paint bucket to fill the selection with an appropriate colour.
When done you can paint bucket the main colour (no selection) to flood-fill any
remaining partially transparent pixels.
Editing Pixel Art
You might want to customize your character art! Conveniently, your sprite sheets
are designed so that each limb of the character is composed of a consistent
colour in each frame.
This allows us to use the "colour selection" tool to select the limb in every frame.
And as above, the paint bucket can be used to fill the limb with an appropriate colour.
When complete, you can draw in anything else you like, though you will have to
do it for each cell. If you save it to your Godot project, it will overwrite
the graphics, and instantly show up in your game!
Scaling Pixel Art
Be aware that if you scale pixel art, there is a very high chance the edges will
become fuzzy and indistinct. This is because of "interpolation".
To avoid this problem, set the scaling tool to Interpolation - None.
Now when you scale your pixel art it will snap to the closes whole pixel,
maintaining the crisp edges.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

-40
View File
@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://2ovhbun1d00s"
path="res://.godot/imported/crate.png-3c788bb24b8188e6f11d4ace2d9118d8.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/destructibles/crate.png"
dest_files=["res://.godot/imported/crate.png-3c788bb24b8188e6f11d4ace2d9118d8.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b6fqvrq70n5al"
path="res://.godot/imported/Terrain (32x32).png-7c65717e98f50801dcb0b6e4b7ea2dbc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/environment/Terrain (32x32).png"
dest_files=["res://.godot/imported/Terrain (32x32).png-7c65717e98f50801dcb0b6e4b7ea2dbc.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

-40
View File
@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b583o88duaqu"
path="res://.godot/imported/sky.png-86cc6f428916ab8e3e1824da6ccc3df5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/environment/bg/sky.png"
dest_files=["res://.godot/imported/sky.png-86cc6f428916ab8e3e1824da6ccc3df5.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cn1qvqti2u0pk"
path="res://.godot/imported/mushroom_32x64.png-f773d82c5be18b26897c2ebfe3849a39.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/environment/mushroom_32x64.png"
dest_files=["res://.godot/imported/mushroom_32x64.png-f773d82c5be18b26897c2ebfe3849a39.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 675 B

-40
View File
@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cj3we2brsknxh"
path="res://.godot/imported/veg_32x32.png-f547c76da23451f9a832bbe2fb852b32.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/environment/veg_32x32.png"
dest_files=["res://.godot/imported/veg_32x32.png-f547c76da23451f9a832bbe2fb852b32.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dngnhx41kw3mw"
path="res://.godot/imported/Player Punch 64x64.png-e81d95f7286a1f82c2b84ff5ac90cdcb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/player/charging/Player Punch 64x64.png"
dest_files=["res://.godot/imported/Player Punch 64x64.png-e81d95f7286a1f82c2b84ff5ac90cdcb.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b1ai5l50rwv4u"
path="res://.godot/imported/Player Idle 48x48.png-f4dc4a776c51960ade42b56516ebdf44.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/player/idle/Player Idle 48x48.png"
dest_files=["res://.godot/imported/Player Idle 48x48.png-f4dc4a776c51960ade42b56516ebdf44.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1021 B

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cgyc5mlhrd472"
path="res://.godot/imported/player jump 48x48.png-76072e8defb6fa3b97cc972a34149281.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/player/jump_fall/player jump 48x48.png"
dest_files=["res://.godot/imported/player jump 48x48.png-76072e8defb6fa3b97cc972a34149281.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://di17x5ovjtvtt"
path="res://.godot/imported/player run 48x48.png-88a3d854902c0e89fc61b644954350dd.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/player/run/player run 48x48.png"
dest_files=["res://.godot/imported/player run 48x48.png-88a3d854902c0e89fc61b644954350dd.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cl142hwp38td6"
path="res://.godot/imported/pixel_bullet.png-20ba33e0a261e4601930c0fd8abb422a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://assets/projectiles/pixel_bullet.png"
dest_files=["res://.godot/imported/pixel_bullet.png-20ba33e0a261e4601930c0fd8abb422a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file not shown.
-13
View File
@@ -15,14 +15,6 @@ run/main_scene="uid://ch6sfehmsskcs"
config/features=PackedStringArray("4.6", "Forward Plus")
config/icon="res://icon.svg"
[display]
window/size/viewport_width=580
window/size/viewport_height=370
window/size/window_width_override=960
window/size/window_height_override=540
window/stretch/mode="viewport"
[input]
shove={
@@ -35,11 +27,6 @@ shoot={
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":90,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null)
]
}
fire={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":67,"key_label":0,"unicode":99,"location":0,"echo":false,"script":null)
]
}
[physics]
+7 -16
View File
@@ -1,23 +1,14 @@
[gd_scene format=3 uid="uid://bp51pocvj7p3x"]
[ext_resource type="Script" uid="uid://bvy43aky6y3er" path="res://scripts/bullet.gd" id="1_mkf8s"]
[ext_resource type="Texture2D" uid="uid://cl142hwp38td6" path="res://assets/projectiles/pixel_bullet.png" id="2_y25gk"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_y25gk"]
size = Vector2(10, 4)
[sub_resource type="RectangleShape2D" id="RectangleShape2D_h1aey"]
size = Vector2(8, 3)
[node name="Bullet" type="Area2D" unique_id=397024757]
[node name="Bullet" type="Area2D" unique_id=1728947011]
script = ExtResource("1_mkf8s")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1862785605]
shape = SubResource("RectangleShape2D_y25gk")
debug_color = Color(0.92602646, 0.20405883, 0.46076977, 0.41960785)
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1465228846]
texture_filter = 1
position = Vector2(-2.9999998, -1.9999998)
rotation = -3.1367095
scale = Vector2(0.07999989, 0.08039169)
texture = ExtResource("2_y25gk")
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=791301971]
position = Vector2(0, 0.5)
shape = SubResource("RectangleShape2D_h1aey")
debug_color = Color(0.9348346, 0.10724712, 0.5768572, 0.41960785)
+1 -7
View File
@@ -1,19 +1,13 @@
[gd_scene format=3 uid="uid://b6cmg0k8qjoxi"]
[ext_resource type="Script" uid="uid://cxgsqwmbd0c8q" path="res://scripts/crate.gd" id="1_b66cd"]
[ext_resource type="Texture2D" uid="uid://2ovhbun1d00s" path="res://assets/destructibles/crate.png" id="2_dwt0d"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_uwrxv"]
[node name="Crate" type="RigidBody2D" unique_id=1609374030 groups=["shootable"]]
[node name="Crate" type="RigidBody2D" unique_id=1609374030]
script = ExtResource("1_b66cd")
metadata/_edit_group_ = true
[node name="Sprite2D" type="Sprite2D" parent="." unique_id=1887853406]
position = Vector2(0, 2)
scale = Vector2(0.08, 0.08)
texture = ExtResource("2_dwt0d")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1778772587]
shape = SubResource("RectangleShape2D_uwrxv")
debug_color = Color(0.83607924, 0.38220474, 0.18172199, 0.41960785)
+20 -423
View File
@@ -1,400 +1,11 @@
[gd_scene format=4 uid="uid://ch6sfehmsskcs"]
[gd_scene format=3 uid="uid://ch6sfehmsskcs"]
[ext_resource type="Script" uid="uid://dtv434qd1rfmu" path="res://scripts/game.gd" id="1_lnu2h"]
[ext_resource type="Texture2D" uid="uid://b583o88duaqu" path="res://assets/environment/bg/sky.png" id="2_0tnpc"]
[ext_resource type="Script" uid="uid://b5c00ybml8rj" path="res://scripts/scene_manager.gd" id="2_lbhrr"]
[ext_resource type="Texture2D" uid="uid://b6fqvrq70n5al" path="res://assets/environment/Terrain (32x32).png" id="2_p57ef"]
[ext_resource type="Texture2D" uid="uid://cn1qvqti2u0pk" path="res://assets/environment/mushroom_32x64.png" id="3_gee14"]
[ext_resource type="Texture2D" uid="uid://cj3we2brsknxh" path="res://assets/environment/veg_32x32.png" id="4_0tnpc"]
[ext_resource type="PackedScene" uid="uid://byl4bdrupii3k" path="res://scenes/player.tscn" id="4_iywne"]
[ext_resource type="PackedScene" uid="uid://b6cmg0k8qjoxi" path="res://scenes/crate.tscn" id="5_iywne"]
[ext_resource type="PackedScene" uid="uid://b3hgbbmb0nohj" path="res://scenes/trigger.tscn" id="5_p57ef"]
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u5sy4"]
texture = ExtResource("2_p57ef")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
0:0/0/terrain_set = 0
0:0/0/terrain = 0
0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:0/0/terrains_peering_bit/right_side = 0
0:0/0/terrains_peering_bit/bottom_right_corner = 0
0:0/0/terrains_peering_bit/bottom_side = 0
1:0/0 = 0
1:0/0/terrain_set = 0
1:0/0/terrain = 0
1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, -2.5490456, -16, -1.593153)
1:0/0/terrains_peering_bit/right_side = 0
1:0/0/terrains_peering_bit/bottom_right_corner = 0
1:0/0/terrains_peering_bit/bottom_side = 0
1:0/0/terrains_peering_bit/bottom_left_corner = 0
1:0/0/terrains_peering_bit/left_side = 0
2:0/0 = 0
2:0/0/terrain_set = 0
2:0/0/terrain = 0
2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:0/0/terrains_peering_bit/bottom_side = 0
2:0/0/terrains_peering_bit/bottom_left_corner = 0
2:0/0/terrains_peering_bit/left_side = 0
4:0/0 = 0
4:0/0/terrain_set = 0
4:0/0/terrain = 0
4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
4:0/0/terrains_peering_bit/bottom_side = 0
6:0/0 = 0
6:0/0/terrain_set = 0
6:0/0/terrain = 0
6:0/0/terrains_peering_bit/right_side = 0
6:0/0/terrains_peering_bit/bottom_side = 0
6:0/0/terrains_peering_bit/bottom_left_corner = 0
6:0/0/terrains_peering_bit/left_side = 0
6:0/0/terrains_peering_bit/top_left_corner = 0
6:0/0/terrains_peering_bit/top_side = 0
6:0/0/terrains_peering_bit/top_right_corner = 0
7:0/0 = 0
7:0/0/terrain_set = 0
7:0/0/terrain = 0
7:0/0/terrains_peering_bit/right_side = 0
7:0/0/terrains_peering_bit/bottom_right_corner = 0
7:0/0/terrains_peering_bit/bottom_side = 0
7:0/0/terrains_peering_bit/left_side = 0
7:0/0/terrains_peering_bit/top_left_corner = 0
7:0/0/terrains_peering_bit/top_side = 0
7:0/0/terrains_peering_bit/top_right_corner = 0
9:0/0 = 0
9:0/0/terrain_set = 0
9:0/0/terrain = 0
9:0/0/terrains_peering_bit/right_side = 0
9:0/0/terrains_peering_bit/bottom_right_corner = 0
9:0/0/terrains_peering_bit/bottom_side = 0
9:0/0/terrains_peering_bit/bottom_left_corner = 0
9:0/0/terrains_peering_bit/left_side = 0
9:0/0/terrains_peering_bit/top_side = 0
10:0/0 = 0
10:0/0/terrain_set = 0
10:0/0/terrain = 0
10:0/0/terrains_peering_bit/right_side = 0
10:0/0/terrains_peering_bit/bottom_side = 0
10:0/0/terrains_peering_bit/bottom_left_corner = 0
10:0/0/terrains_peering_bit/left_side = 0
10:0/0/terrains_peering_bit/top_left_corner = 0
10:0/0/terrains_peering_bit/top_side = 0
12:0/0 = 0
12:0/0/terrain_set = 0
12:0/0/terrain = 0
12:0/0/terrains_peering_bit/right_side = 0
12:0/0/terrains_peering_bit/bottom_right_corner = 0
12:0/0/terrains_peering_bit/bottom_side = 0
12:0/0/terrains_peering_bit/left_side = 0
12:0/0/terrains_peering_bit/top_side = 0
12:0/0/terrains_peering_bit/top_right_corner = 0
13:0/0 = 0
13:0/0/terrain_set = 0
13:0/0/terrain = 0
13:0/0/terrains_peering_bit/right_side = 0
13:0/0/terrains_peering_bit/bottom_side = 0
13:0/0/terrains_peering_bit/bottom_left_corner = 0
13:0/0/terrains_peering_bit/left_side = 0
13:0/0/terrains_peering_bit/top_side = 0
15:0/0 = 0
15:0/0/terrain_set = 0
15:0/0/terrain = 0
15:0/0/terrains_peering_bit/right_side = 0
15:0/0/terrains_peering_bit/bottom_side = 0
15:0/0/terrains_peering_bit/left_side = 0
15:0/0/terrains_peering_bit/top_side = 0
0:1/0 = 0
0:1/0/terrain_set = 0
0:1/0/terrain = 0
0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -1.5931549, -16, -0.63726044, 16, -16, 16)
0:1/0/terrains_peering_bit/right_side = 0
0:1/0/terrains_peering_bit/bottom_right_corner = 0
0:1/0/terrains_peering_bit/bottom_side = 0
0:1/0/terrains_peering_bit/top_side = 0
0:1/0/terrains_peering_bit/top_right_corner = 0
1:1/0 = 0
2:1/0 = 0
2:1/0/terrain_set = 0
2:1/0/terrain = 0
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0.95589066, -16, 16, -16, 16, 16, 0.31863022, 16)
2:1/0/terrains_peering_bit/bottom_side = 0
2:1/0/terrains_peering_bit/bottom_left_corner = 0
2:1/0/terrains_peering_bit/left_side = 0
2:1/0/terrains_peering_bit/top_left_corner = 0
2:1/0/terrains_peering_bit/top_side = 0
4:1/0 = 0
4:1/0/terrain_set = 0
4:1/0/terrain = 0
4:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
4:1/0/terrains_peering_bit/bottom_side = 0
4:1/0/terrains_peering_bit/top_side = 0
6:1/0 = 0
6:1/0/terrain_set = 0
6:1/0/terrain = 0
6:1/0/terrains_peering_bit/right_side = 0
6:1/0/terrains_peering_bit/bottom_right_corner = 0
6:1/0/terrains_peering_bit/bottom_side = 0
6:1/0/terrains_peering_bit/bottom_left_corner = 0
6:1/0/terrains_peering_bit/left_side = 0
6:1/0/terrains_peering_bit/top_left_corner = 0
6:1/0/terrains_peering_bit/top_side = 0
7:1/0 = 0
7:1/0/terrain_set = 0
7:1/0/terrain = 0
7:1/0/terrains_peering_bit/right_side = 0
7:1/0/terrains_peering_bit/bottom_right_corner = 0
7:1/0/terrains_peering_bit/bottom_side = 0
7:1/0/terrains_peering_bit/bottom_left_corner = 0
7:1/0/terrains_peering_bit/left_side = 0
7:1/0/terrains_peering_bit/top_side = 0
7:1/0/terrains_peering_bit/top_right_corner = 0
9:1/0 = 0
9:1/0/terrain_set = 0
9:1/0/terrain = 0
9:1/0/terrains_peering_bit/right_side = 0
9:1/0/terrains_peering_bit/bottom_right_corner = 0
9:1/0/terrains_peering_bit/bottom_side = 0
9:1/0/terrains_peering_bit/top_side = 0
9:1/0/terrains_peering_bit/top_right_corner = 0
10:1/0 = 0
10:1/0/terrain_set = 0
10:1/0/terrain = 0
10:1/0/terrains_peering_bit/right_side = 0
10:1/0/terrains_peering_bit/bottom_side = 0
10:1/0/terrains_peering_bit/left_side = 0
10:1/0/terrains_peering_bit/top_left_corner = 0
10:1/0/terrains_peering_bit/top_side = 0
10:1/0/terrains_peering_bit/top_right_corner = 0
12:1/0 = 0
12:1/0/terrain_set = 0
12:1/0/terrain = 0
12:1/0/terrains_peering_bit/right_side = 0
12:1/0/terrains_peering_bit/bottom_side = 0
12:1/0/terrains_peering_bit/left_side = 0
12:1/0/terrains_peering_bit/top_side = 0
12:1/0/terrains_peering_bit/top_right_corner = 0
13:1/0 = 0
13:1/0/terrain_set = 0
13:1/0/terrain = 0
13:1/0/terrains_peering_bit/right_side = 0
13:1/0/terrains_peering_bit/bottom_side = 0
13:1/0/terrains_peering_bit/left_side = 0
13:1/0/terrains_peering_bit/top_left_corner = 0
13:1/0/terrains_peering_bit/top_side = 0
15:1/0 = 0
15:1/0/terrain_set = 0
15:1/0/terrain = 0
15:1/0/terrains_peering_bit/right_side = 0
15:1/0/terrains_peering_bit/bottom_side = 0
15:1/0/terrains_peering_bit/bottom_left_corner = 0
15:1/0/terrains_peering_bit/top_side = 0
15:1/0/terrains_peering_bit/top_right_corner = 0
16:1/0 = 0
16:1/0/terrain_set = 0
16:1/0/terrain = 0
16:1/0/terrains_peering_bit/right_side = 0
16:1/0/terrains_peering_bit/bottom_right_corner = 0
16:1/0/terrains_peering_bit/bottom_side = 0
16:1/0/terrains_peering_bit/left_side = 0
16:1/0/terrains_peering_bit/top_left_corner = 0
16:1/0/terrains_peering_bit/top_side = 0
16:1/0/terrains_peering_bit/top_right_corner = 0
0:2/0 = 0
0:2/0/terrain_set = 0
0:2/0/terrain = 0
0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:2/0/terrains_peering_bit/right_side = 0
0:2/0/terrains_peering_bit/top_side = 0
0:2/0/terrains_peering_bit/top_right_corner = 0
1:2/0 = 0
1:2/0/terrain_set = 0
1:2/0/terrain = 0
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -0.31863022, 16, -0.63726044, 16, 16, -16, 16)
1:2/0/terrains_peering_bit/right_side = 0
1:2/0/terrains_peering_bit/left_side = 0
1:2/0/terrains_peering_bit/top_left_corner = 0
1:2/0/terrains_peering_bit/top_side = 0
1:2/0/terrains_peering_bit/top_right_corner = 0
2:2/0 = 0
2:2/0/terrain_set = 0
2:2/0/terrain = 0
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:2/0/terrains_peering_bit/left_side = 0
2:2/0/terrains_peering_bit/top_left_corner = 0
2:2/0/terrains_peering_bit/top_side = 0
4:2/0 = 0
4:2/0/terrain_set = 0
4:2/0/terrain = 0
4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
4:2/0/terrains_peering_bit/top_side = 0
6:3/0 = 0
6:3/0/terrain_set = 0
6:3/0/terrain = 0
6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -0.9558945, -16, -0.9558945, 16, -16, 16)
6:3/0/terrains_peering_bit/right_side = 0
6:3/0/terrains_peering_bit/bottom_side = 0
6:3/0/terrains_peering_bit/top_side = 0
6:3/0/terrains_peering_bit/top_right_corner = 0
7:3/0 = 0
7:3/0/terrain_set = 0
7:3/0/terrain = 0
7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(0.95589066, -16, 16, -16, 16, 16, 1.5931549, 16)
7:3/0/terrains_peering_bit/bottom_side = 0
7:3/0/terrains_peering_bit/left_side = 0
7:3/0/terrains_peering_bit/top_left_corner = 0
7:3/0/terrains_peering_bit/top_side = 0
9:3/0 = 0
9:3/0/terrain_set = 0
9:3/0/terrain = 0
9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, -1.2745228, -16, -1.2745228)
9:3/0/terrains_peering_bit/right_side = 0
9:3/0/terrains_peering_bit/bottom_side = 0
9:3/0/terrains_peering_bit/bottom_left_corner = 0
9:3/0/terrains_peering_bit/left_side = 0
10:3/0 = 0
10:3/0/terrain_set = 0
10:3/0/terrain = 0
10:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, -1.2745228, -16, -1.2745228)
10:3/0/terrains_peering_bit/right_side = 0
10:3/0/terrains_peering_bit/bottom_right_corner = 0
10:3/0/terrains_peering_bit/bottom_side = 0
10:3/0/terrains_peering_bit/left_side = 0
12:3/0 = 0
12:3/0/terrain_set = 0
12:3/0/terrain = 0
12:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
12:3/0/terrains_peering_bit/right_side = 0
12:3/0/terrains_peering_bit/bottom_side = 0
12:3/0/terrains_peering_bit/top_side = 0
12:3/0/terrains_peering_bit/top_right_corner = 0
13:3/0 = 0
13:3/0/terrain_set = 0
13:3/0/terrain = 0
13:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
13:3/0/terrains_peering_bit/right_side = 0
13:3/0/terrains_peering_bit/bottom_side = 0
13:3/0/terrains_peering_bit/left_side = 0
15:3/0 = 0
15:3/0/terrain_set = 0
15:3/0/terrain = 0
15:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
15:3/0/terrains_peering_bit/right_side = 0
15:3/0/terrains_peering_bit/bottom_side = 0
16:3/0 = 0
16:3/0/terrain_set = 0
16:3/0/terrain = 0
16:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
16:3/0/terrains_peering_bit/bottom_side = 0
16:3/0/terrains_peering_bit/left_side = 0
0:4/0 = 0
0:4/0/terrain_set = 0
0:4/0/terrain = 0
0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
0:4/0/terrains_peering_bit/right_side = 0
1:4/0 = 0
1:4/0/terrain_set = 0
1:4/0/terrain = 0
1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
1:4/0/terrains_peering_bit/right_side = 0
1:4/0/terrains_peering_bit/left_side = 0
2:4/0 = 0
2:4/0/terrain_set = 0
2:4/0/terrain = 0
2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
2:4/0/terrains_peering_bit/left_side = 0
4:4/0 = 0
4:4/0/terrain_set = 0
4:4/0/terrain = 0
4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
6:4/0 = 0
6:4/0/terrain_set = 0
6:4/0/terrain = 0
6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -0.9558945, -16, -0.9558945, 16, -16, 16)
6:4/0/terrains_peering_bit/right_side = 0
6:4/0/terrains_peering_bit/bottom_right_corner = 0
6:4/0/terrains_peering_bit/bottom_side = 0
6:4/0/terrains_peering_bit/top_side = 0
7:4/0 = 0
7:4/0/terrain_set = 0
7:4/0/terrain = 0
7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(0.95589066, -16, 16, -16, 16, 16, 1.5931549, 16)
7:4/0/terrains_peering_bit/bottom_side = 0
7:4/0/terrains_peering_bit/bottom_left_corner = 0
7:4/0/terrains_peering_bit/left_side = 0
7:4/0/terrains_peering_bit/top_side = 0
9:4/0 = 0
9:4/0/terrain_set = 0
9:4/0/terrain = 0
9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -1.593153, 16, -1.9117851, 16, 16, -16, 16)
9:4/0/terrains_peering_bit/right_side = 0
9:4/0/terrains_peering_bit/left_side = 0
9:4/0/terrains_peering_bit/top_left_corner = 0
9:4/0/terrains_peering_bit/top_side = 0
10:4/0 = 0
10:4/0/terrain_set = 0
10:4/0/terrain = 0
10:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -1.593153, 16, -1.9117851, 16, 16, -16, 16)
10:4/0/terrains_peering_bit/right_side = 0
10:4/0/terrains_peering_bit/left_side = 0
10:4/0/terrains_peering_bit/top_side = 0
10:4/0/terrains_peering_bit/top_right_corner = 0
12:4/0 = 0
12:4/0/terrain_set = 0
12:4/0/terrain = 0
12:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
12:4/0/terrains_peering_bit/right_side = 0
12:4/0/terrains_peering_bit/left_side = 0
12:4/0/terrains_peering_bit/top_side = 0
13:4/0 = 0
13:4/0/terrain_set = 0
13:4/0/terrain = 0
13:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
13:4/0/terrains_peering_bit/bottom_side = 0
13:4/0/terrains_peering_bit/left_side = 0
13:4/0/terrains_peering_bit/top_side = 0
15:4/0 = 0
15:4/0/terrain_set = 0
15:4/0/terrain = 0
15:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
15:4/0/terrains_peering_bit/right_side = 0
15:4/0/terrains_peering_bit/top_side = 0
16:4/0 = 0
16:4/0/terrain_set = 0
16:4/0/terrain = 0
16:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)
16:4/0/terrains_peering_bit/left_side = 0
16:4/0/terrains_peering_bit/top_side = 0
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_vtaks"]
texture = ExtResource("3_gee14")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
0:0/0/terrain_set = 0
0:0/0/terrains_peering_bit/bottom_side = 1
0:1/0 = 0
0:1/0/terrain_set = 0
0:1/0/terrain = 1
0:1/0/terrains_peering_bit/top_side = 1
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_kvpfn"]
texture = ExtResource("4_0tnpc")
texture_region_size = Vector2i(32, 32)
0:0/0 = 0
0:0/0/terrain_set = 0
0:0/0/terrain = 1
[sub_resource type="TileSet" id="TileSet_gee14"]
tile_size = Vector2i(32, 32)
physics_layer_0/collision_layer = 1
terrain_set_0/mode = 0
terrain_set_0/terrain_0/name = "LeafyGreen"
terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1)
terrain_set_0/terrain_1/name = "Veg 1"
terrain_set_0/terrain_1/color = Color(0.5, 0.4375, 0.25, 1)
sources/0 = SubResource("TileSetAtlasSource_u5sy4")
sources/1 = SubResource("TileSetAtlasSource_vtaks")
sources/2 = SubResource("TileSetAtlasSource_kvpfn")
[sub_resource type="RectangleShape2D" id="RectangleShape2D_8cj0n"]
[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_iywne"]
@@ -402,50 +13,36 @@ sources/2 = SubResource("TileSetAtlasSource_kvpfn")
[node name="Game" type="Node2D" unique_id=981419409]
script = ExtResource("1_lnu2h")
[node name="Parallax2D" type="Parallax2D" parent="." unique_id=2081148083]
repeat_size = Vector2(580, 370)
[node name="Sprite2D" type="Sprite2D" parent="Parallax2D" unique_id=879239814]
texture = ExtResource("2_0tnpc")
offset = Vector2(290, 185)
[node name="TileMapLayer" type="TileMapLayer" parent="." unique_id=1253342998]
tile_map_data = PackedByteArray("AAARAA0AAAAQAAQAAAARAAwAAAAPAAMAAAASAAwAAAABAAQAAAATAAwAAAAQAAQAAAATAAsAAAAEAAAAAAAUAAkAAAAAAAQAAAAVAAkAAAABAAQAAAAWAAkAAAACAAQAAAAXABEAAAAAAAQAAAAYABEAAAAQAAQAAAAYABAAAAAPAAMAAAAZABAAAAABAAQAAAAaABAAAAABAAQAAAAbABAAAAAQAAQAAAAbAA8AAAAEAAAAAAAbAAwAAAAAAAIAAAAbAAsAAAAAAAAAAAAcAAsAAAABAAAAAAAcAAwAAAABAAIAAAAdAAwAAAACAAIAAAAdAAsAAAAJAAMAAAAeAAsAAAACAAQAAAANAA0AAAAAAAQAAAAOAA0AAAABAAQAAAAPAA0AAAABAAQAAAAQAA0AAAABAAQAAAAKAA8AAAAAAAQAAAALAA8AAAABAAQAAAAMAA8AAAABAAQAAAANAA8AAAAKAAMAAAAOAA8AAAABAAAAAAAPAA8AAAABAAAAAAAQAA8AAAACAAAAAAAQABAAAAACAAEAAAAPABAAAAAGAAAAAAAOABAAAAAGAAAAAAANABAAAAAJAAEAAAANABEAAAAAAAIAAAAOABEAAAABAAIAAAAPABEAAAABAAIAAAAQABEAAAAJAAQAAAARABEAAAABAAQAAAASABEAAAAMAAQAAAASABAAAAAEAAAAAAATABEAAAACAAQAAAAbAA4AAgAAAAAAAAAbAAoAAQAAAAEAAAAbAAkAAQAAAAAAAAAKAA4AAQAAAAEAAAAKAA0AAQAAAAAAAAALAA4AAgAAAAAAAAAVAAgAAgAAAAAAAAA=")
tile_set = SubResource("TileSet_gee14")
[node name="SceneManager" type="Node2D" parent="." unique_id=323246552]
script = ExtResource("2_lbhrr")
[node name="Player" parent="." unique_id=2145223914 instance=ExtResource("4_iywne")]
position = Vector2(490, 380)
[node name="Player" parent="." unique_id=1254268479 instance=ExtResource("4_iywne")]
position = Vector2(440.00006, 375.00003)
[node name="Crates" type="Node2D" parent="." unique_id=207771395]
[node name="Crate" parent="Crates" unique_id=1609374030 instance=ExtResource("5_iywne")]
position = Vector2(951, 332.99997)
[node name="Crate3" parent="Crates" unique_id=249514132 instance=ExtResource("5_iywne")]
position = Vector2(731, 340)
position = Vector2(508, 373)
[node name="Crate2" parent="Crates" unique_id=1603366376 instance=ExtResource("5_iywne")]
position = Vector2(558, 368)
position = Vector2(1098, 323)
[node name="Walls" type="Node2D" parent="." unique_id=80334518]
[node name="Walls" type="Node2D" parent="." unique_id=1895909883]
[node name="StaticBody2D" type="StaticBody2D" parent="Walls" unique_id=1863997109]
position = Vector2(553.00006, 401)
position = Vector2(446.00006, 404)
scale = Vector2(3.4000025, 1)
metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D" unique_id=1910670137]
shape = SubResource("RectangleShape2D_8cj0n")
[node name="StaticBody2D4" type="StaticBody2D" parent="Walls" unique_id=823918434]
position = Vector2(857, 608)
[node name="StaticBody2D4" type="StaticBody2D" parent="Walls" unique_id=575340316]
position = Vector2(516, 404)
scale = Vector2(3.4000025, 1)
metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D4" unique_id=1243761990]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D4" unique_id=522720352]
shape = SubResource("RectangleShape2D_8cj0n")
[node name="StaticBody2D3" type="StaticBody2D" parent="Walls" unique_id=2089762008]
@@ -465,23 +62,23 @@ metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D2" unique_id=1636593491]
shape = SubResource("RectangleShape2D_8cj0n")
[node name="StaticBody2D5" type="StaticBody2D" parent="Walls" unique_id=564687476]
[node name="StaticBody2D5" type="StaticBody2D" parent="Walls" unique_id=1787748242]
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D5" unique_id=1147447008]
position = Vector2(0, 588)
[node name="CollisionShape2D" type="CollisionShape2D" parent="Walls/StaticBody2D5" unique_id=1244109335]
position = Vector2(0, 554)
shape = SubResource("WorldBoundaryShape2D_iywne")
[node name="Triggers" type="Node2D" parent="." unique_id=1195236992]
[node name="Triggers" type="Node2D" parent="." unique_id=193669081]
[node name="Trigger" parent="Triggers" unique_id=229441825 instance=ExtResource("5_p57ef")]
position = Vector2(712, 463)
[node name="Trigger" parent="Triggers" unique_id=1050615345 instance=ExtResource("5_p57ef")]
position = Vector2(621.00006, 465.00006)
[node name="Trigger2" parent="Triggers" unique_id=1474950249 instance=ExtResource("5_p57ef")]
position = Vector2(817, 445)
[node name="Trigger2" parent="Triggers" unique_id=1114882050 instance=ExtResource("5_p57ef")]
position = Vector2(829, 464)
intent = "fan"
[node name="Trigger3" parent="Triggers" unique_id=205623468 instance=ExtResource("5_p57ef")]
position = Vector2(953.99994, 442.99997)
[node name="Trigger3" parent="Triggers" unique_id=400578019 instance=ExtResource("5_p57ef")]
position = Vector2(1097, 462.99997)
intent = "teleport"
[connection signal="areaTriggerSignal" from="Triggers/Trigger" to="." method="_on_trigger"]
+18 -237
View File
@@ -1,252 +1,33 @@
[gd_scene format=3 uid="uid://byl4bdrupii3k"]
[ext_resource type="Script" uid="uid://b1obldvd2etx7" path="res://scripts/player.gd" id="1_3vyb7"]
[ext_resource type="Texture2D" uid="uid://b1ai5l50rwv4u" path="res://assets/player/idle/Player Idle 48x48.png" id="2_g2els"]
[ext_resource type="Texture2D" uid="uid://dngnhx41kw3mw" path="res://assets/player/charging/Player Punch 64x64.png" id="2_qlg0r"]
[ext_resource type="Texture2D" uid="uid://cgyc5mlhrd472" path="res://assets/player/jump_fall/player jump 48x48.png" id="3_dqkch"]
[ext_resource type="Texture2D" uid="uid://di17x5ovjtvtt" path="res://assets/player/run/player run 48x48.png" id="3_qhqgy"]
[sub_resource type="CircleShape2D" id="CircleShape2D_uwrxv"]
[sub_resource type="AtlasTexture" id="AtlasTexture_l71n6"]
atlas = ExtResource("2_qlg0r")
region = Rect2(128, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_4ni07"]
atlas = ExtResource("3_dqkch")
region = Rect2(96, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_qhqgy"]
atlas = ExtResource("2_g2els")
region = Rect2(0, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_dqkch"]
atlas = ExtResource("2_g2els")
region = Rect2(48, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_qlg0r"]
atlas = ExtResource("2_g2els")
region = Rect2(96, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_tuyoq"]
atlas = ExtResource("2_g2els")
region = Rect2(144, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_fjrip"]
atlas = ExtResource("2_g2els")
region = Rect2(192, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_smehm"]
atlas = ExtResource("2_g2els")
region = Rect2(240, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_ur7pv"]
atlas = ExtResource("2_g2els")
region = Rect2(288, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_y4r1p"]
atlas = ExtResource("2_g2els")
region = Rect2(336, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_d2wvv"]
atlas = ExtResource("2_g2els")
region = Rect2(384, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_3v2ag"]
atlas = ExtResource("2_g2els")
region = Rect2(432, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_i4ail"]
atlas = ExtResource("3_dqkch")
region = Rect2(0, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_a38lo"]
atlas = ExtResource("3_dqkch")
region = Rect2(48, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_jej6c"]
atlas = ExtResource("3_qhqgy")
region = Rect2(0, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_f1ej7"]
atlas = ExtResource("3_qhqgy")
region = Rect2(48, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_oprun"]
atlas = ExtResource("3_qhqgy")
region = Rect2(96, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_a8ls1"]
atlas = ExtResource("3_qhqgy")
region = Rect2(144, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_qfm1y"]
atlas = ExtResource("3_qhqgy")
region = Rect2(192, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_fulsm"]
atlas = ExtResource("3_qhqgy")
region = Rect2(240, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_4r5pv"]
atlas = ExtResource("3_qhqgy")
region = Rect2(288, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_60mlk"]
atlas = ExtResource("3_qhqgy")
region = Rect2(336, 0, 48, 48)
[sub_resource type="AtlasTexture" id="AtlasTexture_ke2ow"]
atlas = ExtResource("2_qlg0r")
region = Rect2(192, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_ujl30"]
atlas = ExtResource("2_qlg0r")
region = Rect2(256, 0, 64, 64)
[sub_resource type="AtlasTexture" id="AtlasTexture_31cv2"]
atlas = ExtResource("2_qlg0r")
region = Rect2(320, 0, 64, 64)
[sub_resource type="SpriteFrames" id="SpriteFrames_jej6c"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_l71n6")
}],
"loop": false,
"name": &"charging",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_4ni07")
}],
"loop": false,
"name": &"falling",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_qhqgy")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_dqkch")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_qlg0r")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_tuyoq")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fjrip")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_smehm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ur7pv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_y4r1p")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_d2wvv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_3v2ag")
}],
"loop": true,
"name": &"idle",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_i4ail")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_a38lo")
}],
"loop": false,
"name": &"jumping",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_jej6c")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_f1ej7")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_oprun")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_a8ls1")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_qfm1y")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_fulsm")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_4r5pv")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_60mlk")
}],
"loop": true,
"name": &"running",
"speed": 12.0
}, {
"frames": [{
"duration": 1.0,
"texture": SubResource("AtlasTexture_ke2ow")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_ujl30")
}, {
"duration": 1.0,
"texture": SubResource("AtlasTexture_31cv2")
}],
"loop": false,
"name": &"shoving",
"speed": 12.0
}]
[node name="Player" type="CharacterBody2D" unique_id=2145223914]
[node name="Player" type="CharacterBody2D" unique_id=1254268479]
scale = Vector2(1.4799998, 1.4799998)
script = ExtResource("1_3vyb7")
metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=775715684]
[node name="Label" type="Label" parent="." unique_id=712501367]
offset_left = -19.594597
offset_top = -36.486492
offset_right = 20.405403
offset_bottom = -13.486492
text = "label"
horizontal_alignment = 1
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=771657224]
shape = SubResource("CircleShape2D_uwrxv")
debug_color = Color(0.39731503, 0.48776567, 0.95015794, 0.41960785)
[node name="RightCast" type="RayCast2D" parent="." unique_id=967990879]
target_position = Vector2(16.891893, 0)
[node name="RightCast" type="RayCast2D" parent="." unique_id=1585175579]
target_position = Vector2(16.216217, -0.67567575)
[node name="LeftCast" type="RayCast2D" parent="." unique_id=926020029]
target_position = Vector2(-17.56757, -0.67567575)
[node name="LeftCast" type="RayCast2D" parent="." unique_id=544087242]
target_position = Vector2(-15.540543, -0.67567575)
[node name="RightSpawn" type="Marker2D" parent="." unique_id=72314368]
position = Vector2(12.837839, -8.1081085)
[node name="RightTarget" type="Marker2D" parent="." unique_id=855125472]
position = Vector2(15.540543, -8.783785)
[node name="LeftSpawn" type="Marker2D" parent="." unique_id=374152113]
position = Vector2(-12.837839, -8.108109)
[node name="PlayerGraphic" type="AnimatedSprite2D" parent="." unique_id=174634956]
texture_filter = 1
position = Vector2(0, -6.081082)
sprite_frames = SubResource("SpriteFrames_jej6c")
animation = &"shoving"
autoplay = "idle"
frame = 2
frame_progress = 1.0
[node name="Camera2D" type="Camera2D" parent="." unique_id=144867956]
offset = Vector2(0, -50)
[connection signal="animation_finished" from="PlayerGraphic" to="." method="_on_animation_finished"]
[node name="LeftTarget" type="Marker2D" parent="." unique_id=1162416681]
position = Vector2(-14.864867, -8.783785)
-17
View File
@@ -1,17 +0,0 @@
[gd_scene format=3 uid="uid://do4vf0eh7ku01"]
[ext_resource type="Script" uid="uid://bv3ixqvmjrf8j" path="res://scripts/rocket.gd" id="1_3341w"]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_00dr1"]
size = Vector2(12, 4)
[node name="Rocket" type="RigidBody2D" unique_id=2026133878]
contact_monitor = true
max_contacts_reported = 2
script = ExtResource("1_3341w")
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1980926328]
shape = SubResource("RectangleShape2D_00dr1")
debug_color = Color(0.63964945, 0.5193221, 0.22762358, 0.41960785)
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
+12 -2
View File
@@ -4,13 +4,23 @@
[sub_resource type="CircleShape2D" id="CircleShape2D_8cj0n"]
[node name="Trigger" type="Area2D" unique_id=229441825]
[node name="Trigger" type="Area2D" unique_id=1050615345]
scale = Vector2(4.2, 4.2)
script = ExtResource("1_du5ex")
metadata/_edit_group_ = true
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1121443164]
[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=703121924]
shape = SubResource("CircleShape2D_8cj0n")
debug_color = Color(0.3285461, 0.6189337, 0.22834331, 0.41960785)
[node name="Label" type="Label" parent="." unique_id=1171382845]
texture_filter = 1
offset_left = -18.333336
offset_top = -8.333334
offset_right = 21.666664
offset_bottom = 2.666666
theme_override_font_sizes/font_size = 7
text = "trigger"
horizontal_alignment = 1
[connection signal="body_entered" from="." to="." method="_on_body_entered"]
+13 -7
View File
@@ -1,13 +1,19 @@
class_name Bullet extends Area2D
var speed:float = 700
signal bulletHitSignal(body, bullet)
func setSpeed(value)->void:
speed = value
var speed:float = 700
signal bulletDamageSignal(body, bullet)
func setSpeed(value:int)->void:
speed = value
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
position += transform.x * speed * delta
position += transform.x * speed *delta
func _on_body_entered(body: Node2D) -> void:
if body is Crate:
bulletHitSignal.emit(body,self)
bulletDamageSignal.emit(body, self)
func _on_area_entered(area: Area2D) -> void:
bulletDamageSignal.emit(area, self)
+2 -2
View File
@@ -1,7 +1,7 @@
class_name Crate extends RigidBody2D
var teleport_target:Vector2 = Vector2.ZERO
var should_teleport:bool = false
var teleport_target: Vector2 = Vector2.ZERO
var should_teleport: bool = false
func teleport_to(position:Vector2):
teleport_target = position
+18 -26
View File
@@ -1,10 +1,13 @@
class_name GameController extends Node2D
signal destroySignal(body)
signal fanTriggerSignal(body, fanDirection)
signal teleportTriggerSignal(body)
extends Node2D
var numberOfCrates = 2
var timeAvailable = 50
signal destroySignal(body)
signal levelChangeSignal(level)
signal fanUpSignal(body,direction)
signal teleportSignal(body)
var timer = Timer.new()
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
@@ -20,38 +23,27 @@ func countdown()->void:
timeAvailable-=1
if timeAvailable<=0 and numberOfCrates>0:
print("LOOOOOSAH")
get_tree().reload_current_scene()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
levelChangeSignal.emit("res://scenes/game.tscn")
func _on_trigger(body: Variant, trigger: Variant, intent:String) -> void:
print("GC knows trigger fired")
print("GC knows trigger fired "+intent)
match intent:
"destroy":
print("GC sending destroy signal")
destroySignal.emit(body)
"fan":
print("do a fan effect")
fanTriggerSignal.emit(body,Vector2(0,-1)*100*9)
if body is RigidBody2D:
fanUpSignal.emit(body,Vector2(0,-1)*100*9)
"teleport":
print("do a teleport")
teleportTriggerSignal.emit(body)
if body is Crate:
teleportSignal.emit(body)
#from scene manager
func crateTotal(howmany):
numberOfCrates = howmany
print("GC knows about crates: "+str(numberOfCrates))
if numberOfCrates == 0:
print("YOU WON!!!")
get_tree().reload_current_scene()
levelChangeSignal.emit("res://scenes/game.tscn")
func bulletDamage(body, _bullet)->void:
if body.is_in_group("shootable"):
destroySignal.emit(body)
destroySignal.emit(_bullet)
func rocketDamage(body, rocket)->void:
if body.is_in_group("shootable"):
print("Rocket strikes target!")
destroySignal.emit(body)
func bulletDamage()->void:
print("bullet damage")
+56 -113
View File
@@ -1,158 +1,101 @@
class_name Player extends CharacterBody2D
signal pushSignal(body, direction)
signal shootSignal(markerPosition, speed)
signal fireSignal(markerPosition, direction, speed)
@onready var right_cast: RayCast2D = $RightCast
@onready var left_cast: RayCast2D = $LeftCast
@onready var right_spawn: Marker2D = $RightSpawn
@onready var left_spawn: Marker2D = $LeftSpawn
@onready var player_graphic: AnimatedSprite2D = $PlayerGraphic
var pushRightEnabled = false
var pushLeftEnabled = false
@onready var label: Label = $Label
@onready var rightRay: RayCast2D = $RightCast
@onready var leftRay: RayCast2D = $LeftCast
@onready var right_target: Marker2D = $RightTarget
@onready var left_target: Marker2D = $LeftTarget
var pushRightEnabled:=false
var pushLeftEnabled := false
var pushTarget
var pushTimer = 0
var pushTimer:int = 0
signal forcePushSignal(body,direction)
signal shootSignal(targetPosition, speed)
#track facing direction
enum FaceDirection {LEFT,RIGHT}
var facing:FaceDirection = FaceDirection.RIGHT
const SPEED = 300.0
const JUMP_VELOCITY = -400.0
enum FaceDirection {RIGHT,LEFT}
var facing:FaceDirection = FaceDirection.RIGHT
enum PlayerStates {IDLE,RUNNING,JUMPING,FALLING,CHARGING,SHOVING}
var current_player_state:PlayerStates = PlayerStates.IDLE
var upJump:bool = false
func _physics_process(delta: float) -> void:
handle_input()
handle_movement(delta)
handle_states()
handle_animation()
move_and_slide()
handle_collisions()
# Add the gravity.
if not is_on_floor():
velocity += get_gravity() * delta
func handle_input()->void:
# Handle jump.
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
velocity.y = JUMP_VELOCITY
current_player_state=PlayerStates.JUMPING
upJump = true
# Handle shove.
if Input.is_action_just_pressed("shove"):
print("I want to shove")
if pushRightEnabled and facing==FaceDirection.RIGHT:
current_player_state= PlayerStates.CHARGING
pushTimer = Time.get_ticks_msec()
if pushLeftEnabled and facing==FaceDirection.LEFT:
current_player_state= PlayerStates.CHARGING
pushTimer = Time.get_ticks_msec()
# Handle shove
if Input.is_action_just_pressed("shove"):
pushTimer = Time.get_ticks_msec() #record start of build
#Handle shove
if Input.is_action_just_released("shove"):
var pushForce = Time.get_ticks_msec() - pushTimer
#do a maximium force value
if pushForce>4000:
pushForce=4000
pushForce = 4000
if pushRightEnabled and facing==FaceDirection.RIGHT:
#deliver the boom
pushSignal.emit(pushTarget, Vector2(1,0)*100*(pushForce/100))
current_player_state = PlayerStates.SHOVING
label.text = "shove"
forcePushSignal.emit(pushTarget, Vector2(1,0)*100*(pushForce/100))
if pushLeftEnabled and facing==FaceDirection.LEFT:
pushSignal.emit(pushTarget, Vector2(-1,0)*100*(pushForce/100))
current_player_state = PlayerStates.SHOVING
#Handle Shoot Bullet
forcePushSignal.emit(pushTarget, Vector2(-1,0)*100*(pushForce/100))
label.text = "shove"
# Handle Shoot
if Input.is_action_just_pressed("shoot"):
print("Ima shoot a bullet")
#marker postion, speed
print("Player wants to shoot")
match facing:
FaceDirection.RIGHT:
shootSignal.emit(right_spawn.global_transform, 800)
print("Shoot to the right")
#%SceneManager.makeBullet(right_target.global_transform, 700)
shootSignal.emit(right_target.global_transform, 700)
FaceDirection.LEFT:
shootSignal.emit(left_spawn.global_transform, -800)
#Handle fire rocket
if Input.is_action_just_pressed("fire"):
print("Ima fire rocket")
match facing:
FaceDirection.RIGHT:
fireSignal.emit(right_spawn.global_transform,Vector2(1,0), 800)
FaceDirection.LEFT:
fireSignal.emit(left_spawn.global_transform,Vector2(1,0), 800)
print("Shoot to the left")
#%SceneManager.makeBullet(left_target.global_transform, -700)
shootSignal.emit(left_target.global_transform, -700)
# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
var direction := Input.get_axis("ui_left", "ui_right")
if direction:
velocity.x = direction * SPEED
if direction >0:
if direction>0:
facing = FaceDirection.RIGHT
player_graphic.flip_h = false
else:
facing = FaceDirection.LEFT
player_graphic.flip_h = true
else:
velocity.x = move_toward(velocity.x, 0, SPEED)
func handle_movement(delta)->void:
# Add the gravity.
if not is_on_floor():
velocity += get_gravity() * delta
func handle_collisions()->void:
if right_cast.is_colliding():
print("Right raycast collision")
var collider = right_cast.get_collider()
move_and_slide()
#a loop
for i in get_slide_collision_count():
var c = get_slide_collision(i)
#is this a bonkable thing?
if c.get_collider() is RigidBody2D:
forcePushSignal.emit(c.get_collider(), -c.get_normal() * 100)
if rightRay.is_colliding():
#get the thing causing the collision
var collider = rightRay.get_collider()
if collider is Node:
pushRightEnabled = true
pushTarget = collider
else:
pushRightEnabled = false
if left_cast.is_colliding():
print("Left raycast collision")
var collider = left_cast.get_collider()
if leftRay.is_colliding():
#get the thing causing the collision
var collider = leftRay.get_collider()
if collider is Node:
pushLeftEnabled = true
pushTarget = collider
else:
pushLeftEnabled = false
#a loop
for i in get_slide_collision_count():
var c = get_slide_collision(i)
#is this a bonkable thing?
if c.get_collider() is RigidBody2D:
#c.get_collider().apply_central_impulse(-c.get_normal() * 100)
pushSignal.emit(c.get_collider(), -c.get_normal() * 100)
#Exciting new stuff
func handle_states()->void:
match current_player_state:
PlayerStates.IDLE when velocity.x !=0:
current_player_state = PlayerStates.RUNNING
PlayerStates.RUNNING when velocity.x ==0:
current_player_state = PlayerStates.IDLE
PlayerStates.JUMPING when velocity.y>0:
current_player_state = PlayerStates.FALLING
PlayerStates.FALLING when is_on_floor():
if velocity.x ==0:
current_player_state = PlayerStates.IDLE
else:
current_player_state = PlayerStates.RUNNING
func handle_animation()->void:
match current_player_state:
PlayerStates.RUNNING:
player_graphic.play("running")
PlayerStates.IDLE:
player_graphic.play("idle")
PlayerStates.JUMPING:
if upJump:
player_graphic.play("jumping")
PlayerStates.FALLING:
player_graphic.play("falling")
PlayerStates.CHARGING:
player_graphic.play("charging")
PlayerStates.SHOVING:
player_graphic.play("shoving")
func _on_animation_finished() -> void:
match current_player_state:
PlayerStates.JUMPING:
upJump = false
PlayerStates.SHOVING:
current_player_state = PlayerStates.IDLE
-20
View File
@@ -1,20 +0,0 @@
class_name Rocket extends RigidBody2D
signal splodeSignal(rocket)
signal impactSignal(body, rocket)
func _ready() -> void:
#Rockets expolode in time
var timer = Timer.new()
add_child(timer)
timer.wait_time = 4
timer.one_shot = true
timer.connect("timeout", splode)
timer.start()
func _on_body_entered(body: Node) -> void:
print("Rocket hit a target")
impactSignal.emit(body, self)
#should i splode myself? No. Scene manager job.
func splode()->void:
splodeSignal.emit(self)
-1
View File
@@ -1 +0,0 @@
uid://bv3ixqvmjrf8j
+38 -76
View File
@@ -1,110 +1,72 @@
extends Node2D
@onready var game: GameController = $".."
@onready var game: Node2D = $".."
@onready var crates: Node2D = $"../Crates"
@onready var player: Player = $"../Player"
@onready var player: CharacterBody2D = $"../Player"
var bullet = preload("res://scenes/bullet.tscn")
var rocket = preload("res://scenes/rocket.tscn")
var bulletArray:Array[Bullet] = []
var totalAllowedBullets:int = 7
var rocketDict:Dictionary = {}
var totalAllowedRockets:int = 3
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
#signals from the view
player.pushSignal.connect(pushTarget)
#wire up view
player.forcePushSignal.connect(push)
player.shootSignal.connect(makeBullet)
player.fireSignal.connect(makeRocket)
#signals from the GameController
#wire up gamecontroller
game.destroySignal.connect(destroy)
game.fanTriggerSignal.connect(pushTarget)
game.teleportTriggerSignal.connect(teleportTarget)
game.levelChangeSignal.connect(changeScene)
game.fanUpSignal.connect(push)
game.teleportSignal.connect(teleport)
buildLevel()
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
pass
func buildLevel()->void:
#tell GC how many crates...
updateCrates()
func updateCrates()->void:
var totalCrates = 0
var _crateTotal:int = 0
if crates:
for obj in crates.get_children():
if obj is Crate:
if not obj.tree_exited.is_connected(updateCrates):
obj.tree_exited.connect(updateCrates)
totalCrates +=1
_crateTotal +=1
game.crateTotal(_crateTotal)
game.crateTotal(totalCrates)
#applies impulse to rigidbodies
func push(body, direction)->void:
body.apply_central_impulse(direction)
func pushTarget(body,pushDirection)->void:
if body is RigidBody2D:
body.apply_central_impulse(pushDirection)
func stashBullet(bullet:Bullet)->void:
#hide the bullet
var stashPosition:Vector2 = Vector2(-100,-100)
bullet.position = stashPosition
bullet.setSpeed(0)
bullet.set_process(false)
func destroy(body)->void:
match body:
var bod when bod is Bullet:
stashBullet(body)
var bod when bod is Crate:
body.queue_free()
_:
body.queue_free()
func teleportTarget(body)->void:
func teleport(body, _bodyposition=null)->void:
print("teleport a body")
if body is Crate:
var viewport_size = get_viewport().get_visible_rect().size
var random_x = randf_range(0, viewport_size.x)
var random_y = randf_range(0, viewport_size.y)
var newPosition = Vector2(random_x,random_y)
body.teleport_to(newPosition)
func bulletFactory()->Bullet:
var myBullet:Bullet
#how many bullets have been produced?
if bulletArray.size() <= totalAllowedBullets:
#make a new bullet
myBullet = bullet.instantiate()
add_sibling(myBullet)
if not myBullet.bulletHitSignal.is_connected(game.bulletDamage):
myBullet.bulletHitSignal.connect(game.bulletDamage)
else:
myBullet = bulletArray.pop_back()
bulletArray.push_front(myBullet)
return myBullet
func makeBullet(spawnPosition, speed)->void:
print("make bullet")
func destroy(body)->void:
body.queue_free()
func changeScene(level)->void:
get_tree().call_deferred("change_scene_to_file",level)
func bulletFactory()->Bullet :
var myBullet:Bullet
#how many bullets have been made?
if bulletArray.size() <= totalAllowedBullets:
myBullet = bullet.instantiate()
if not myBullet.bulletDamageSignal.is_connected(game.bulletDamage):
myBullet.bulletDamageSignal.connect(game.bulletDamage)
add_sibling(myBullet)
else:
myBullet = bulletArray.pop_back()
bulletArray.push_front(myBullet)
return myBullet
func makeBullet(targetPosition:Transform2D, speed:int)->void:
var myBullet:Bullet = bulletFactory()
myBullet.transform = spawnPosition
myBullet.transform = targetPosition
myBullet.setSpeed(speed)
myBullet.set_process(true)
func rocketFactory()->Rocket:
var myRocket:Rocket
myRocket = rocket.instantiate()
add_sibling(myRocket)
var rocketStat={
"damage": 10
}
rocketDict[myRocket]=rocketStat
return myRocket
func makeRocket(spawnPosition, direction, speed)->void:
print("make a rocket")
var myRocket:Rocket = rocketFactory()
myRocket.splodeSignal.connect(destroy)
myRocket.impactSignal.connect(game.rocketDamage)
myRocket.transform = spawnPosition
pushTarget(myRocket,direction*speed)
+4 -4
View File
@@ -1,12 +1,12 @@
class_name Trigger extends Area2D
@export var intent = "destroy"
extends Area2D
signal areaTriggerSignal(body, trigger, intent)
@export var intent:String="destroy"
@onready var label: Label = $Label
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
print("Trigger is ready.")
label.text = str(intent)
# Called every frame. 'delta' is the elapsed time since the previous frame.