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