From bd197168c39551c3456099ed2a39375a8442483f Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado Date: Tue, 31 May 2022 03:49:28 -0600 Subject: working snake generation and path following, minor refactor --- src/entities/actors/snake/scripts/snake.gd | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/entities/actors/snake/scripts/snake.gd (limited to 'src/entities/actors/snake/scripts/snake.gd') diff --git a/src/entities/actors/snake/scripts/snake.gd b/src/entities/actors/snake/scripts/snake.gd new file mode 100644 index 0000000..e604011 --- /dev/null +++ b/src/entities/actors/snake/scripts/snake.gd @@ -0,0 +1,42 @@ +class_name Snake +extends Node2D + +export(PackedScene) var BODY_SEGMENT_NP: PackedScene +export(PackedScene) var TAIL_SEGMENT_NP: PackedScene + +onready var path: Path2D = $Path + +var current_body_segments: int = 0 +var max_body_segments: int = 1 +var body_segment_size: float = 16.0 + + +func _ready(): + Event.connect("new_curve_point", self, "_on_Head_new_curve_point") + + +func _draw() -> void: + if path.curve.get_baked_points().size() >= 2: + draw_polyline(path.curve.get_baked_points(), Color.aquamarine, 1, true) + + +func add_point_to_curve(coordinates: Vector2) -> void: + path.curve.add_point(coordinates) + # update call is to draw curve as there are new points + update() + + if current_body_segments < max_body_segments: + add_snake_segment(BODY_SEGMENT_NP) + elif current_body_segments == max_body_segments: + add_snake_segment(TAIL_SEGMENT_NP) + + +func add_snake_segment(type: PackedScene) -> void: + if path.curve.get_baked_length() >= (current_body_segments + 1.0) * body_segment_size: + var _temp_body_segment: PathFollow2D = type.instance() + path.add_child(_temp_body_segment) + current_body_segments += 1 + + +func _on_Head_new_curve_point(coordinates: Vector2) -> void: + add_point_to_curve(coordinates) -- cgit v1.2.3