diff options
Diffstat (limited to 'scenes/char')
| -rw-r--r-- | scenes/char/weener.gd | 87 | ||||
| -rw-r--r-- | scenes/char/weener.tscn | 48 |
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"] |
