extends AnimatableBody2D class_name snake_segment @export var is_head : bool = false var direction : Vector2 = Vector2.RIGHT var want_direction : Vector2 = Vector2.RIGHT @export var next_segment : Node2D @export var door : Node2D @export var door_disabled : bool = false var start_pos : Vector2 var target_pos : Vector2 var move_progress : float var seg_id : int var snake_speed : float = 1 # if snake is the head, it chooses where it goes # if snake is not the head, it goes where the one infront went # Called when the node enters the scene tree for the first time. func _ready() -> void: target_pos = position start_pos = position get_new_target() become_real() # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: move_progress += delta * snake_speed if(!Router.player_mode): if Input.is_action_just_pressed("left"): want_direction = Vector2.LEFT elif Input.is_action_just_pressed("right"): want_direction = Vector2.RIGHT elif Input.is_action_just_pressed("up"): want_direction = Vector2.UP elif Input.is_action_just_pressed("down"): want_direction = Vector2.DOWN position = lerp(start_pos,target_pos,move_progress) if move_progress >= 1: get_new_target() func get_new_target(): start_pos=target_pos if is_head: if want_direction != direction*-1: direction = want_direction target_pos = start_pos + (direction * 320) else: target_pos = next_segment.position move_progress = 0 func become_real(): collision_layer = 1 z_index = 10 modulate = Color.WHITE pass func become_fake(): #z_index = 0 #modulate = Color.DIM_GRAY #collision_layer = 2 pass func _on_eat_die_box_area_entered(area: Area2D) -> void: if(area.is_in_group("apple")): area.queue_free() print("mmm tasty apple") Router.eat_apple.emit() if(area.is_in_group("wall")): Router.die.emit() if(area.is_in_group("snake")): if (area.get_parent().is_head): Router.die.emit()