diff --git a/aseprite/houses.aseprite b/aseprite/houses.aseprite new file mode 100644 index 0000000..425bc35 Binary files /dev/null and b/aseprite/houses.aseprite differ diff --git a/aseprite/nature.aseprite b/aseprite/nature.aseprite new file mode 100644 index 0000000..a6a0fdd Binary files /dev/null and b/aseprite/nature.aseprite differ diff --git a/assets/textures/spritesheets/hood_player.png b/assets/textures/spritesheets/hood_player.png index 18eaee2..68c18d5 100644 Binary files a/assets/textures/spritesheets/hood_player.png and b/assets/textures/spritesheets/hood_player.png differ diff --git a/assets/textures/spritesheets/houses.png b/assets/textures/spritesheets/houses.png new file mode 100644 index 0000000..4387a5e Binary files /dev/null and b/assets/textures/spritesheets/houses.png differ diff --git a/assets/textures/spritesheets/houses.png.import b/assets/textures/spritesheets/houses.png.import new file mode 100644 index 0000000..a86098a --- /dev/null +++ b/assets/textures/spritesheets/houses.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://db4dctk13rgbm" +path="res://.godot/imported/houses.png-beb9348ecf7ad3cb2e053ab2dbfaa8e1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/spritesheets/houses.png" +dest_files=["res://.godot/imported/houses.png-beb9348ecf7ad3cb2e053ab2dbfaa8e1.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 diff --git a/project.godot b/project.godot index 6ae5e4d..8218eea 100644 --- a/project.godot +++ b/project.godot @@ -100,6 +100,18 @@ escape={ , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":true,"script":null) ] } +interact={ +"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":4194309,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +, 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":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) +, Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(495, 26),"global_position":Vector2(514, 122),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) +, 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":89,"key_label":0,"unicode":122,"location":0,"echo":false,"script":null) +] +} + +[layer_names] + +2d_physics/layer_2="Interactable" [physics] diff --git a/scenes/houses/home.tscn b/scenes/houses/home.tscn new file mode 100644 index 0000000..c1c8814 --- /dev/null +++ b/scenes/houses/home.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=6 format=3 uid="uid://cokphmh2g8wvs"] + +[ext_resource type="Texture2D" uid="uid://db4dctk13rgbm" path="res://assets/textures/spritesheets/houses.png" id="1_fltv6"] +[ext_resource type="PackedScene" uid="uid://h77hilgbces" path="res://scenes/interactables/interact_sceneswitch.tscn" id="2_0afuu"] +[ext_resource type="PackedScene" uid="uid://ccfdsdgaon63m" path="res://scenes/levels/home.tscn" id="3_0afuu"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_0db70"] +atlas = ExtResource("1_fltv6") +region = Rect2(1, 4, 94, 89) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0afuu"] +size = Vector2(90, 46) + +[node name="Home" type="StaticBody2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +texture = SubResource("AtlasTexture_0db70") + +[node name="InteractSceneswitch" parent="." instance=ExtResource("2_0afuu")] +position = Vector2(0, 25) +scene = ExtResource("3_0afuu") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(0, 18) +shape = SubResource("RectangleShape2D_0afuu") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) diff --git a/scenes/interactable.tscn b/scenes/interactable.tscn new file mode 100644 index 0000000..ac16966 --- /dev/null +++ b/scenes/interactable.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=3 uid="uid://n24dhbpflcec"] + +[ext_resource type="Script" uid="uid://ccthj5mtii0bw" path="res://scripts/interactable.gd" id="1_56v82"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ij5l6"] +size = Vector2(32, 32) + +[node name="Interactable" type="Area2D"] +collision_layer = 2 +collision_mask = 0 +script = ExtResource("1_56v82") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_ij5l6") diff --git a/scenes/interactables/interact_sceneswitch.tscn b/scenes/interactables/interact_sceneswitch.tscn new file mode 100644 index 0000000..e496d87 --- /dev/null +++ b/scenes/interactables/interact_sceneswitch.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=3 format=3 uid="uid://h77hilgbces"] + +[ext_resource type="Script" uid="uid://c4ejbchoh7yrh" path="res://scripts/interactables/interact_sceneswitch.gd" id="1_f3ssn"] +[ext_resource type="PackedScene" uid="uid://n24dhbpflcec" path="res://scenes/interactable.tscn" id="2_43o6g"] + +[node name="InteractSceneswitch" type="Node2D"] +script = ExtResource("1_f3ssn") + +[node name="Interactable" parent="." instance=ExtResource("2_43o6g")] + +[connection signal="interacted" from="Interactable" to="." method="_on_interactable_interacted"] diff --git a/scenes/levels/hood.tscn b/scenes/levels/hood.tscn index 89a3745..94ed45a 100644 --- a/scenes/levels/hood.tscn +++ b/scenes/levels/hood.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=5 format=4 uid="uid://clnb1eshis30m"] +[gd_scene load_steps=8 format=4 uid="uid://clnb1eshis30m"] [ext_resource type="Texture2D" uid="uid://dve2b2glwitsw" path="res://assets/textures/tilemaps/grass_tilemap.png" id="1_74em3"] [ext_resource type="PackedScene" uid="uid://dfbomt0l6b1o4" path="res://scenes/player.tscn" id="1_ge1l5"] +[ext_resource type="PackedScene" uid="uid://cokphmh2g8wvs" path="res://scenes/houses/home.tscn" id="3_5rqdi"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_1r5ec"] texture = ExtResource("1_74em3") @@ -192,13 +193,33 @@ terrain_set_0/terrain_1/name = "Dirt" terrain_set_0/terrain_1/color = Color(0.5, 0.34375, 0.25, 1) sources/2 = SubResource("TileSetAtlasSource_1r5ec") -[node name="Hood" type="Node2D"] +[sub_resource type="TileSetScenesCollectionSource" id="TileSetScenesCollectionSource_1r5ec"] +resource_name = "Houses" +scenes/1/scene = ExtResource("3_5rqdi") -[node name="TileMapLayer" type="TileMapLayer" parent="."] +[sub_resource type="TileSet" id="TileSet_5rqdi"] +tile_size = Vector2i(32, 32) +sources/0 = SubResource("TileSetScenesCollectionSource_1r5ec") + +[node name="Hood" type="Node2D"] +z_as_relative = false +y_sort_enabled = true + +[node name="Ground" type="TileMapLayer" parent="."] +z_index = -1 tile_map_data = PackedByteArray("AAAQAAkAAgAAAAMAAAAQAAgAAgAAAAMAAAAQAAcAAgAAAAMAAAAQAAYAAgAAAAMAAAAQAAUAAgAAAAMAAAAQAAQAAgAAAAMAAAAQAAMAAgAAAAMAAAAQAAIAAgAAAAMAAAAQAAEAAgAAAAMAAAAQAAAAAgAAAAMAAAAQAP//AgAAAAMAAAAQAP7/AgAAAAMAAAAPAAkAAgAAAAMAAAAPAAgAAgAAAAMAAAAPAAcAAgAAAAMAAAAPAAYAAgADAAMAAAAPAAUAAgADAAIAAAAPAAQAAgAAAAAAAAAPAAMAAgAAAAMAAAAPAAIAAgAAAAMAAAAPAAEAAgAAAAMAAAAPAAAAAgAAAAMAAAAPAP//AgAAAAMAAAAPAP7/AgAAAAMAAAAOAAkAAgAAAAMAAAAOAAgAAgAAAAMAAAAOAAcAAgAAAAMAAAAOAAYAAgABAAIAAAAOAAUAAgACAAEAAAAOAAQAAgADAAAAAAAOAAMAAgAAAAMAAAAOAAIAAgAAAAMAAAAOAAEAAgAAAAMAAAAOAAAAAgAAAAMAAAAOAP//AgAAAAMAAAAOAP7/AgAAAAMAAAANAAkAAgAAAAMAAAANAAgAAgAAAAMAAAANAAcAAgAAAAMAAAANAAYAAgABAAIAAAANAAUAAgACAAEAAAANAAQAAgADAAAAAAANAAMAAgAAAAMAAAANAAIAAgAAAAMAAAANAAEAAgAAAAMAAAANAAAAAgAAAAMAAAANAP//AgAAAAMAAAANAP7/AgAAAAMAAAAMAAkAAgAAAAMAAAAMAAgAAgAAAAMAAAAMAAcAAgAAAAMAAAAMAAYAAgABAAIAAAAMAAUAAgACAAEAAAAMAAQAAgADAAAAAAAMAAMAAgAAAAMAAAAMAAIAAgAAAAMAAAAMAAEAAgAAAAMAAAAMAAAAAgAAAAMAAAAMAP//AgAAAAMAAAAMAP7/AgAAAAMAAAALAAkAAgAAAAMAAAALAAgAAgAAAAMAAAALAAcAAgAAAAMAAAALAAYAAgABAAIAAAALAAUAAgACAAEAAAALAAQAAgADAAAAAAALAAMAAgAAAAMAAAALAAIAAgAAAAMAAAALAAEAAgAAAAMAAAALAAAAAgAAAAMAAAALAP//AgAAAAMAAAALAP7/AgAAAAMAAAAKAAkAAgAAAAMAAAAKAAgAAgAAAAMAAAAKAAcAAgAAAAMAAAAKAAYAAgABAAIAAAAKAAUAAgACAAEAAAAKAAQAAgACAAAAAAAKAAMAAgADAAIAAAAKAAIAAgAAAAAAAAAKAAEAAgAAAAMAAAAKAAAAAgAAAAMAAAAKAP//AgAAAAMAAAAKAP7/AgAAAAMAAAAJAAkAAgAAAAMAAAAJAAgAAgAAAAMAAAAJAAcAAgAAAAMAAAAJAAYAAgABAAIAAAAJAAUAAgACAAEAAAAJAAQAAgACAAEAAAAJAAMAAgACAAEAAAAJAAIAAgADAAAAAAAJAAEAAgAAAAMAAAAJAAAAAgAAAAMAAAAJAP//AgAAAAMAAAAJAP7/AgAAAAMAAAAIAAkAAgAAAAMAAAAIAAgAAgAAAAMAAAAIAAcAAgAAAAMAAAAIAAYAAgABAAIAAAAIAAUAAgACAAEAAAAIAAQAAgABAAEAAAAIAAMAAgABAAAAAAAIAAIAAgABAAMAAAAIAAEAAgAAAAMAAAAIAAAAAgAAAAMAAAAIAP//AgAAAAMAAAAIAP7/AgAAAAMAAAAHAAkAAgAAAAMAAAAHAAgAAgAAAAMAAAAHAAcAAgAAAAMAAAAHAAYAAgABAAIAAAAHAAUAAgACAAEAAAAHAAQAAgADAAAAAAAHAAMAAgAAAAMAAAAHAAIAAgAAAAMAAAAHAAEAAgAAAAMAAAAHAAAAAgAAAAMAAAAHAP//AgAAAAMAAAAHAP7/AgAAAAMAAAAGAAkAAgAAAAMAAAAGAAgAAgAAAAMAAAAGAAcAAgAAAAMAAAAGAAYAAgABAAIAAAAGAAUAAgACAAEAAAAGAAQAAgADAAAAAAAGAAMAAgAAAAMAAAAGAAIAAgAAAAMAAAAGAAEAAgAAAAMAAAAGAAAAAgAAAAMAAAAGAP//AgAAAAMAAAAGAP7/AgAAAAMAAAAFAAkAAgAAAAMAAAAFAAgAAgAAAAMAAAAFAAcAAgAAAAMAAAAFAAYAAgABAAIAAAAFAAUAAgACAAEAAAAFAAQAAgADAAAAAAAFAAMAAgAAAAMAAAAFAAIAAgAAAAMAAAAFAAEAAgAAAAMAAAAFAAAAAgAAAAMAAAAFAP//AgAAAAMAAAAFAP7/AgAAAAMAAAAEAAkAAgAAAAMAAAAEAAgAAgAAAAMAAAAEAAcAAgAAAAMAAAAEAAYAAgABAAIAAAAEAAUAAgACAAEAAAAEAAQAAgACAAAAAAAEAAMAAgADAAIAAAAEAAIAAgADAAIAAAAEAAEAAgAAAAAAAAAEAAAAAgAAAAMAAAAEAP//AgAAAAMAAAAEAP7/AgAAAAMAAAADAAkAAgAAAAMAAAADAAgAAgAAAAMAAAADAAcAAgAAAAMAAAADAAYAAgABAAIAAAADAAUAAgACAAEAAAADAAQAAgACAAEAAAADAAMAAgACAAEAAAADAAIAAgACAAEAAAADAAEAAgADAAAAAAADAAAAAgAAAAMAAAADAP//AgAAAAMAAAADAP7/AgAAAAMAAAACAAkAAgAAAAMAAAACAAgAAgAAAAMAAAACAAcAAgAAAAMAAAACAAYAAgAAAAIAAAACAAUAAgABAAAAAAACAAQAAgACAAIAAAACAAMAAgACAAEAAAACAAIAAgABAAEAAAACAAEAAgABAAMAAAACAAAAAgAAAAMAAAACAP//AgAAAAMAAAACAP7/AgAAAAMAAAABAAkAAgAAAAMAAAABAAgAAgAAAAMAAAABAAcAAgAAAAMAAAABAAYAAgAAAAMAAAABAAUAAgAAAAMAAAABAAQAAgABAAIAAAABAAMAAgACAAEAAAABAAIAAgADAAAAAAABAAEAAgAAAAMAAAABAAAAAgAAAAMAAAABAP//AgAAAAMAAAABAP7/AgAAAAMAAAAAAAkAAgAAAAMAAAAAAAgAAgAAAAMAAAAAAAcAAgAAAAMAAAAAAAYAAgAAAAMAAAAAAAUAAgAAAAMAAAAAAAQAAgABAAIAAAAAAAMAAgACAAEAAAAAAAIAAgADAAAAAAAAAAEAAgAAAAMAAAAAAAAAAgAAAAMAAAAAAP//AgAAAAMAAAAAAP7/AgAAAAMAAAD//wkAAgAAAAMAAAD//wgAAgAAAAMAAAD//wcAAgAAAAMAAAD//wYAAgAAAAMAAAD//wUAAgAAAAMAAAD//wQAAgABAAIAAAD//wMAAgACAAEAAAD//wIAAgADAAAAAAD//wEAAgAAAAMAAAD//wAAAgAAAAMAAAD/////AgAAAAMAAAD///7/AgAAAAMAAAD+/wkAAgAAAAMAAAD+/wgAAgAAAAMAAAD+/wcAAgAAAAMAAAD+/wYAAgAAAAMAAAD+/wUAAgAAAAMAAAD+/wQAAgAAAAIAAAD+/wMAAgABAAAAAAD+/wIAAgABAAMAAAD+/wEAAgAAAAMAAAD+/wAAAgAAAAMAAAD+////AgAAAAMAAAD+//7/AgAAAAMAAAA=") tile_set = SubResource("TileSet_ge1l5") +rendering_quadrant_size = 32 +physics_quadrant_size = 32 metadata/_edit_lock_ = true +[node name="Objects" type="TileMapLayer" parent="."] +y_sort_enabled = true +tile_map_data = PackedByteArray("AAADAAAAAAAAAAAAAQA=") +tile_set = SubResource("TileSet_5rqdi") +rendering_quadrant_size = 32 +physics_quadrant_size = 32 + [node name="Player" parent="." node_paths=PackedStringArray("tilemap") instance=ExtResource("1_ge1l5")] -position = Vector2(110, 50) -tilemap = NodePath("../TileMapLayer") +position = Vector2(110, 38) +tilemap = NodePath("../Ground") diff --git a/scenes/player.tscn b/scenes/player.tscn index d66141a..68c1464 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -102,7 +102,7 @@ motion_mode = 1 script = ExtResource("1_3vyb7") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] -position = Vector2(-1, -1) +y_sort_enabled = true sprite_frames = SubResource("SpriteFrames_qhqgy") animation = &"down" @@ -115,3 +115,10 @@ shape = SubResource("CapsuleShape2D_3vyb7") process_callback = 0 drag_horizontal_enabled = true drag_vertical_enabled = true + +[node name="RayCast2D" type="RayCast2D" parent="."] +target_position = Vector2(0, 32) +collision_mask = 2 +hit_from_inside = true +collide_with_areas = true +collide_with_bodies = false diff --git a/scripts/interactable.gd b/scripts/interactable.gd new file mode 100644 index 0000000..41cb896 --- /dev/null +++ b/scripts/interactable.gd @@ -0,0 +1,6 @@ +class_name Interactable +extends Area2D + +signal interacted + +func interact() -> void: interacted.emit() diff --git a/scripts/interactable.gd.uid b/scripts/interactable.gd.uid new file mode 100644 index 0000000..0de4499 --- /dev/null +++ b/scripts/interactable.gd.uid @@ -0,0 +1 @@ +uid://ccthj5mtii0bw diff --git a/scripts/interactables/interact_sceneswitch.gd b/scripts/interactables/interact_sceneswitch.gd new file mode 100644 index 0000000..02b7769 --- /dev/null +++ b/scripts/interactables/interact_sceneswitch.gd @@ -0,0 +1,6 @@ +extends Node2D + +@export var scene: PackedScene + +func _on_interactable_interacted() -> void: + get_tree().change_scene_to_packed(scene) diff --git a/scripts/interactables/interact_sceneswitch.gd.uid b/scripts/interactables/interact_sceneswitch.gd.uid new file mode 100644 index 0000000..a39665d --- /dev/null +++ b/scripts/interactables/interact_sceneswitch.gd.uid @@ -0,0 +1 @@ +uid://c4ejbchoh7yrh diff --git a/scripts/player.gd b/scripts/player.gd index ce5785e..87ce8d4 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -5,6 +5,10 @@ const SPEED: int = 800 @onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D @onready var cam: Camera2D = $Camera2D +@onready var raycast: RayCast2D = $RayCast2D +const RAYCAST_RAGE: int = 32 + + @export var tilemap: TileMapLayer var tilesize: int = 32 var position_limit_rect: Rect2 @@ -29,10 +33,25 @@ func _ready() -> void: ) ) +func _process(_delta: float) -> void: + if Input.is_action_just_pressed("interact") && raycast.is_colliding() && raycast.get_collider() is Interactable: + var interactable: Interactable = raycast.get_collider() + interactable.interact() + func _physics_process(delta: float) -> void: if EventManager.player_free: - velocity = Input.get_vector("move_left","move_right","move_up","move_down").normalized() * delta * SPEED * 3 - + var input := Input.get_vector("move_left", "move_right", "move_up", "move_down").normalized() + + var raycast_input := Vector2.ZERO + if abs(input.x) > abs(input.y): + raycast_input.x = sign(input.x) + elif abs(input.y) > 0: + raycast_input.y = sign(input.y) + if raycast_input != Vector2.ZERO: + raycast.target_position = raycast_input * RAYCAST_RAGE + + velocity = input * delta * SPEED * 3 + move_and_slide() position = position.clamp(position_limit_rect.position, position_limit_rect.end)