80 lines
2.1 KiB
GDScript
80 lines
2.1 KiB
GDScript
extends Node2D
|
|
|
|
@export var segements_holder : Node2D
|
|
var segements : Array[snake_segment]
|
|
@export var SNAKE_SPEED : float = 0.2
|
|
@export var snake_line : Line2D
|
|
@export var player : Node2D
|
|
var food : float = 5
|
|
@export var max_food = 5
|
|
@export var food_drain = 0.1
|
|
var pit_apples : int = 0
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
Router.activate_seg.connect(activate_segment)
|
|
Router.eat_apple.connect(rec_apple)
|
|
food = max_food
|
|
#segements = get_children() as Array[snake_segment]
|
|
segements.assign(segements_holder.get_children())
|
|
for i in segements.size():
|
|
if i == 0:
|
|
segements[i].is_head = true
|
|
|
|
else:
|
|
segements[i].next_segment = segements[i-1]
|
|
if i < segements.size()-1:
|
|
segements[i].door.prev_seg = segements[i+1]
|
|
segements[i].snake_speed = SNAKE_SPEED
|
|
segements[i].seg_id = i
|
|
#segements[i].z_index = 100-i
|
|
activate_segment(0)
|
|
|
|
|
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
func _process(delta: float) -> void:
|
|
redraw_line()
|
|
|
|
if(Input.is_action_just_pressed("test_add_segment")):
|
|
add_segment()
|
|
|
|
if food > max_food:
|
|
food = max_food
|
|
food -= food_drain * delta
|
|
pass
|
|
|
|
func activate_segment(act_segment : int):
|
|
Router.current_seg = segements[act_segment]
|
|
Router.cur_id = act_segment
|
|
player.call_deferred("reparent",Router.current_seg)
|
|
#player.reparent(Router.current_seg)
|
|
#for i in segements.size():
|
|
#if act_segment == i:
|
|
#segements[i].become_real()
|
|
#
|
|
#else:
|
|
#segements[i].become_fake()
|
|
|
|
|
|
func redraw_line():
|
|
snake_line.clear_points()
|
|
for segment in segements:
|
|
snake_line.add_point(segment.global_position)
|
|
|
|
func add_segment():
|
|
var new_segement : Node2D = load("res://prefabs/snake_segment.tscn").instantiate()
|
|
new_segement.global_position = segements[-1].global_position
|
|
new_segement.next_segment = segements[-1]
|
|
new_segement.door_disabled = true
|
|
segements.append(new_segement)
|
|
segements_holder.add_child(new_segement)
|
|
pass
|
|
|
|
func rec_apple():
|
|
#food += 1
|
|
pit_apples += 1
|
|
SNAKE_SPEED += 0.1
|
|
add_segment()
|
|
for seg in segements:
|
|
seg.snake_speed = SNAKE_SPEED
|
|
|