summaryrefslogtreecommitdiff
path: root/scenes/char
diff options
context:
space:
mode:
authorRadio <radiohotline@disroot.org>2026-06-01 22:28:46 +0300
committerRadio <radiohotline@disroot.org>2026-06-01 22:28:46 +0300
commit2c85d452ad02a5f89cd43bad7f9de31d0e4fa0c1 (patch)
tree758998f717dab8c0ed9d1b47419e7590c28e8fa2 /scenes/char
parent7f437327b25be23b1cdcd4aa3898d428421e533f (diff)
area transitions, basic inventory and use events
Diffstat (limited to 'scenes/char')
-rw-r--r--scenes/char/weener.gd87
-rw-r--r--scenes/char/weener.tscn48
2 files changed, 109 insertions, 26 deletions
diff --git a/scenes/char/weener.gd b/scenes/char/weener.gd
index f4f9e38..b970b20 100644
--- a/scenes/char/weener.gd
+++ b/scenes/char/weener.gd
@@ -1,4 +1,4 @@
-extends CharacterBody2D
+class_name Weener extends CharacterBody2D
@onready var sprite := $Sprite
@onready var nav2d := $NavigationAgent2D
@@ -7,18 +7,43 @@ const ref_speed := 500.0
@onready var speed := ref_speed
@onready var target := position
+@onready var interactions := []
+var door: Door = null
+#@onready var inventory := []
+
+static var spawnpoint: int = -1
+static var sprite_flip: bool
+
+var input_listen := true
+
func _physics_process(delta: float) -> void:
set_target()
- navigate(delta)
+ if input_listen:
+ navigate(delta)
+
+
+func _ready() -> void:
+ nav2d.navigation_finished.connect(func() -> void:
+ if door != null:
+ travel(door)
+ )
+ sprite.flip_h = sprite_flip
+
+
+func _exit_tree() -> void:
+ sprite_flip = sprite.flip_h
func set_target() -> void:
if Input.is_action_just_pressed("set_target"):
- nav2d.target_position = get_global_mouse_position()
- if position.distance_to(nav2d.target_position) > 750:
- speed = ref_speed * 1.8
+ if !interactions.is_empty() and interactions[0].mouse_in:
+ interact(interactions[0])
else:
- speed = ref_speed
+ nav2d.target_position = get_global_mouse_position()
+ if position.distance_to(nav2d.target_position) > 750:
+ speed = ref_speed * 1.8
+ else:
+ speed = ref_speed
func navigate(delta: float) -> void:
@@ -33,3 +58,53 @@ func navigate(delta: float) -> void:
sprite.play("run")
else:
sprite.play("walk")
+
+
+func _on_area_entered(area):
+ interactions.insert(0, area)
+
+
+func _on_area_exited(area):
+ interactions.erase(area)
+
+
+func _on_walk_detect_area_entered(area: Area2D) -> void:
+ door = area as Door
+
+
+func _on_walk_detect_area_exited(_area: Area2D) -> void:
+ door = null
+
+
+func interact(item: Item) -> void:
+ match item.item_type:
+ Item.ItemTypes.NONE:
+ return
+ Item.ItemTypes.TALK:
+ print(" ".join(item.text))
+ Item.ItemTypes.PICKUP:
+ input_listen = false
+ sprite.play("grab")
+ sprite.animation_finished.connect(func() -> void: input_listen = true)
+ Inventory.inventory.set(item.item_id, false)
+ item.queue_free()
+ print(Inventory.inventory)
+ Item.ItemTypes.USE:
+ #item.execute(item.uses)
+ for use in item.uses:
+ match use:
+ Item.UseTypes.TAKE_ITEM:
+ if item.useable_item in Inventory.inventory:
+ Inventory.inventory.set(item.useable_item, true)
+ print(Inventory.inventory)
+ item.used = true
+ Item.UseTypes.CLEAR:
+ if item.used:
+ item.queue_free()
+ _:
+ break
+
+
+func travel(d: Door) -> void:
+ spawnpoint = d.go_to_spawnpoint
+ get_tree().change_scene_to_file(d.target_scene)
diff --git a/scenes/char/weener.tscn b/scenes/char/weener.tscn
index c8164fe..8ed1a80 100644
--- a/scenes/char/weener.tscn
+++ b/scenes/char/weener.tscn
@@ -21,12 +21,6 @@ animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("1_ka3oh")
-}, {
-"duration": 1.0,
-"texture": ExtResource("1_b3dvs")
-}, {
-"duration": 1.0,
-"texture": ExtResource("1_b3dvs")
}],
"loop": false,
"name": &"grab",
@@ -70,7 +64,11 @@ animations = [{
}]
[sub_resource type="RectangleShape2D" id="RectangleShape2D_rsd08"]
-size = Vector2(44, 109.5)
+size = Vector2(65.5, 150.25)
+
+[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_rsd08"]
+radius = 116.0
+height = 444.0
[node name="Weener" type="CharacterBody2D" unique_id=1834042649]
script = ExtResource("1_5hljh")
@@ -81,21 +79,31 @@ sprite_frames = SubResource("SpriteFrames_ka3oh")
animation = &"stand"
autoplay = "stand"
-[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=1548923938]
+[node name="WalkCollision" type="CollisionShape2D" parent="." unique_id=1548923938]
rotation = 1.5707964
shape = SubResource("RectangleShape2D_rsd08")
[node name="NavigationAgent2D" type="NavigationAgent2D" parent="." unique_id=2038637548]
-debug_enabled = true
-[node name="Debug" type="Label" parent="." unique_id=999070759]
-visible = false
-anchors_preset = 5
-anchor_left = 0.5
-anchor_right = 0.5
-offset_left = -20.0
-offset_top = -502.0
-offset_right = 20.0
-offset_bottom = -479.0
-grow_horizontal = 2
-size_flags_vertical = 0
+[node name="InteractDetect" type="Area2D" parent="." unique_id=1466530066]
+collision_mask = 2
+
+[node name="InteractCollision" type="CollisionShape2D" parent="InteractDetect" unique_id=526603123]
+position = Vector2(0, -205)
+shape = SubResource("CapsuleShape2D_rsd08")
+
+[node name="WalkDetect" type="Area2D" parent="." unique_id=1208097571]
+
+[node name="WalkCollision" type="CollisionShape2D" parent="WalkDetect" unique_id=1174332734]
+rotation = 1.5707964
+shape = SubResource("RectangleShape2D_rsd08")
+
+[node name="Inventory" type="Label" parent="." unique_id=1503183978]
+offset_top = -471.0
+offset_right = 40.0
+offset_bottom = -448.0
+
+[connection signal="area_entered" from="InteractDetect" to="." method="_on_area_entered"]
+[connection signal="area_exited" from="InteractDetect" to="." method="_on_area_exited"]
+[connection signal="area_entered" from="WalkDetect" to="." method="_on_walk_detect_area_entered"]
+[connection signal="area_exited" from="WalkDetect" to="." method="_on_walk_detect_area_exited"]