67 lines
1.7 KiB
GDScript
67 lines
1.7 KiB
GDScript
extends Node2D
|
|
class_name RopeSegment
|
|
|
|
var tileSize = 8.9
|
|
|
|
## Called when the node enters the scene tree for the first time.
|
|
#func _ready() -> void:
|
|
#pass # Replace with function body.
|
|
#
|
|
#
|
|
## Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
#func _process(delta: float) -> void:
|
|
#pass
|
|
var conn_point : Vector2
|
|
var rope_sprite : Node2D
|
|
var rope_ray : RayCast2D
|
|
var connection_angle : float
|
|
var clockwise : bool
|
|
|
|
func _ready() -> void:
|
|
rope_sprite = $Sprites
|
|
rope_ray = $RayCast2D
|
|
|
|
func set_conn_point(connection_point : Vector2):
|
|
conn_point = connection_point
|
|
|
|
func update_ray_heading(player_global_pos: Vector2) -> void:
|
|
rope_ray.global_position = player_global_pos
|
|
rope_ray.look_at(conn_point)
|
|
|
|
func update_sprite_heading(global_pos: Vector2) -> void:
|
|
rope_sprite.global_position = global_pos
|
|
rope_sprite.look_at(conn_point)
|
|
|
|
var distance = rope_sprite.global_position.distance_to(conn_point)
|
|
var tile_count = int(distance/tileSize)+1
|
|
#print(distance, " ", tile_count)
|
|
var child_count : int = rope_sprite.get_child_count()
|
|
#var count : int = 0
|
|
|
|
if child_count > tile_count:
|
|
|
|
for i in range(child_count-1,tile_count,-1):
|
|
var child : Sprite2D = rope_sprite.get_child(i)
|
|
if child == $Sprites/Sprite2D:
|
|
continue
|
|
else:
|
|
rope_sprite.remove_child(child)
|
|
child.queue_free()
|
|
#for child in rope_sprite.get_child()
|
|
else:
|
|
for i in range(child_count, tile_count):
|
|
var newRopeTile = $Sprites/Sprite2D.duplicate()
|
|
rope_sprite.add_child(newRopeTile)
|
|
newRopeTile.owner = rope_sprite
|
|
newRopeTile.position = Vector2((i * 175), 0)
|
|
|
|
|
|
|
|
|
|
func safe_destroy() -> void:
|
|
rope_sprite.queue_free()
|
|
remove_child(rope_sprite)
|
|
rope_ray.queue_free()
|
|
remove_child(rope_ray)
|
|
queue_free()
|