local_game_jam_jan_2025/player/rope_segments.gd
Ethan Wellenreiter 319a8ce7b9 Fixed swinging
Signed-off-by: Ethan Wellenreiter <ewellenreiter@gmail.com>
2025-01-04 17:50:30 -05:00

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()