Snake/snakeManager.gd

108 lines
2.6 KiB
GDScript3
Raw Normal View History

2025-08-07 22:45:24 +10:00
extends Node2D
2025-08-08 15:02:44 +10:00
@export var segements_holder : Node2D
2025-08-07 22:58:16 +10:00
var segements : Array[snake_segment]
@export var SNAKE_SPEED : float = 0.2
2025-09-03 12:14:08 +10:00
@export var max_snake_speed : float = 1
2025-08-08 15:02:44 +10:00
@export var snake_line : Line2D
@export var player : Node2D
2025-09-03 12:14:08 +10:00
var food : float = 8
@export var max_food = 8
2025-09-02 23:17:10 +10:00
@export var food_drain = 0.1
2025-09-03 12:14:08 +10:00
@export var food_gain = 0.2
2025-09-02 23:17:10 +10:00
var pit_apples : int = 0
2025-09-02 23:54:19 +10:00
var burn_apples : float = 0
var score : int = 0
2025-08-07 22:45:24 +10:00
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
Router.activate_seg.connect(activate_segment)
2025-09-02 23:17:10 +10:00
Router.eat_apple.connect(rec_apple)
2025-09-02 23:54:19 +10:00
Router.pickup_apple.connect(pickupApple)
Router.burn_apple.connect(burnApple)
2025-09-02 23:17:10 +10:00
food = max_food
2025-08-07 22:45:24 +10:00
#segements = get_children() as Array[snake_segment]
2025-08-08 15:02:44 +10:00
segements.assign(segements_holder.get_children())
2025-08-07 22:45:24 +10:00
for i in segements.size():
if i == 0:
segements[i].is_head = true
2025-08-07 22:45:24 +10:00
else:
segements[i].next_segment = segements[i-1]
if i < segements.size()-1:
segements[i].door.prev_seg = segements[i+1]
2025-08-07 22:58:16 +10:00
segements[i].snake_speed = SNAKE_SPEED
segements[i].seg_id = i
2025-08-08 15:02:44 +10:00
#segements[i].z_index = 100-i
activate_segment(0)
2025-08-07 22:45:24 +10:00
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:
2025-08-08 15:02:44 +10:00
redraw_line()
2025-09-02 23:17:10 +10:00
if(Input.is_action_just_pressed("test_add_segment")):
add_segment()
2025-09-02 23:54:19 +10:00
2025-09-03 12:14:08 +10:00
burn_apples -= 0.3 * delta
2025-09-02 23:54:19 +10:00
if burn_apples <= 0:
burn_apples = 0
else:
2025-09-03 12:14:08 +10:00
food += food_gain * delta
2025-09-02 23:54:19 +10:00
2025-09-02 23:17:10 +10:00
if food > max_food:
food = max_food
food -= food_drain * delta
2025-09-02 23:54:19 +10:00
2025-09-03 12:14:08 +10:00
if food <= 0:
Router.die.emit()
if SNAKE_SPEED > max_snake_speed:
SNAKE_SPEED = max_snake_speed
2025-09-02 23:54:19 +10:00
2025-08-07 22:45:24 +10:00
pass
2025-08-08 15:02:44 +10:00
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()
2025-08-08 15:02:44 +10:00
func redraw_line():
snake_line.clear_points()
for segment in segements:
snake_line.add_point(segment.global_position)
2025-09-02 23:17:10 +10:00
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
2025-09-02 23:54:19 +10:00
SNAKE_SPEED += 0.03
score += 5
2025-09-02 23:17:10 +10:00
add_segment()
for seg in segements:
seg.snake_speed = SNAKE_SPEED
2025-09-02 23:54:19 +10:00
func pickupApple():
pit_apples -= 1
func burnApple():
burn_apples += 1
score += 5