summaryrefslogtreecommitdiff
path: root/scenes/char/weener.gd
diff options
context:
space:
mode:
Diffstat (limited to 'scenes/char/weener.gd')
-rw-r--r--scenes/char/weener.gd87
1 files changed, 81 insertions, 6 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)