diff options
author | David Luevano Alvarado <david@luevano.xyz> | 2022-05-31 03:49:28 -0600 |
---|---|---|
committer | David Luevano Alvarado <david@luevano.xyz> | 2022-05-31 03:49:28 -0600 |
commit | bd197168c39551c3456099ed2a39375a8442483f (patch) | |
tree | adeafb80b75e3566918f35141c2392af590897c3 /src/entities/actors/snake/scripts/snake.gd | |
parent | 2838046928db956b7712d24dfb63ee45fbc4d050 (diff) |
working snake generation and path following, minor refactor
Diffstat (limited to 'src/entities/actors/snake/scripts/snake.gd')
-rw-r--r-- | src/entities/actors/snake/scripts/snake.gd | 42 |
1 files changed, 42 insertions, 0 deletions
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) |