extends Reference const INTERFACES = [preload("res://scripts/player/state/state_interface.tres")] const NAME = "interacting" var ctx: KinematicBody = null var anim_tree: AnimationTree var timer: SceneTreeTimer func _init(): pass func enter_from(state): anim_tree = ctx.get_node("model_transform/DungMan/AnimationTree") anim_tree["parameters/Move/playback"].travel("idle") anim_tree["parameters/Activate/active"] = true timer = ctx.get_tree().create_timer(0.2) timer.connect("timeout", self, "_on_timeout", [], CONNECT_ONESHOT) func exit_to(state): if timer.is_connected("timeout", self, "_on_timeout"): timer.disconnect("timeout", self, "_on_timeout") func physics_process(delta): pass func unhandled_input(event): pass func _on_timeout(): for area in ctx.get_node("%TriggerVolume").get_overlapping_areas(): if try_trigger_interact(area): break if ctx.state == self: ctx.change_state(ctx.StateDefault.new()) func try_trigger_interact(area) -> bool: var owner = area if area.has_meta("owner"): owner = area.get_meta("owner") if not owner.has_method("on_player_interact"): return false var result = owner.on_player_interact(ctx) if not result: print("player failed to interacted with ", owner) return false print("player interacted with ", owner) return true func on_sleep(made_it_to_bed: bool, hop_position: Spatial): ctx.change_state(ctx.StateSleeping.new(made_it_to_bed, hop_position)) func on_start_playing_rover_game(): ctx.change_state(ctx.StatePlayingRoverGame.new()) func on_stop_playing_rover_game(): assert(false, "invalid state")