74 lines
1.9 KiB
GDScript
74 lines
1.9 KiB
GDScript
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
|
|
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")):
|
|
print("i die")
|
|
get_tree().get_root().process_mode = Node.PROCESS_MODE_DISABLED
|
|
|