Fixed swinging

Signed-off-by: Ethan Wellenreiter <ewellenreiter@gmail.com>
This commit is contained in:
Ethan Wellenreiter 2025-01-04 17:50:17 -05:00
parent 8ef0094818
commit 319a8ce7b9
5 changed files with 36 additions and 10 deletions

View File

@ -27,7 +27,7 @@ func _process(delta: float) -> void:
#print("shooting")
var col_point : Vector2 = get_collision_point()
var dist : float = player.global_position.distance_to(col_point)
print(col_point," ", dist," ", fire_range, " ", player.global_position)
#print(col_point," ", dist," ", fire_range, " ", player.global_position)
if dist < fire_range:
player.connection_point = col_point
player.rope_length = dist

View File

@ -41,6 +41,7 @@ func pop_rope_seg() -> void:
rope_seg.safe_destroy()
func shift_pop_rope_seg() -> void:
#print("shift_pop_entered")
if (rope_segments.size() == 0):
print("ERROR: popping from empty rope")
else:
@ -51,6 +52,7 @@ func shift_pop_rope_seg() -> void:
rope_segments[-2].update_sprite_heading(player.global_position)
rope_segments[-2].update_ray_heading(player.global_position)
pop_rope_seg()
#print("shift_pop_exited")
@ -59,7 +61,25 @@ func clear_rope() -> void:
pop_rope_seg()
func angle_valid_release_rope(a1:float, a2:float, cw:bool) -> bool:
var result : bool
#a1 = fmod(a1+PI, 2*PI)
#a2 = fmod(a2+PI, 2*PI)
#print(abs(a1-a2))
var diff : float = PI - abs(abs(a1 - a2) - PI)
#print("angle diff: ", PI - abs(abs(a1 - a2) - PI))
var angle_margin : float = 0.2
if cw:
result = fmod(a2-angle_margin, 2*PI) < a1 and diff < angle_margin
#print()
else:
result = fmod(a2+angle_margin, 2*PI) > a1 and diff < angle_margin
#print(a1, " ", a2, " ", cw, " ", result)
return result
func check_new_coll():
#print("enter")
var cur_rope = rope_segments[-1]
if cur_rope.rope_ray.is_colliding():
var col_point : Vector2 = cur_rope.rope_ray.get_collision_point()
@ -74,28 +94,34 @@ func check_new_coll():
rope_segments[-2].connection_angle = rope_segments[-2].conn_point.angle_to_point(player.global_position)
var tangent : Vector2 = col_point - player.global_position
tangent = Vector2(-tangent.y, tangent.x)
rope_segments[-2].clockwise = player.velocity.dot(tangent) > 0
rope_segments[-2].clockwise = player.velocity.dot(tangent) < 0
#cur_rope.update_sprite_heading(col_point)
player.rope_length = dist
player.connection_point = col_point
else:
var counter : int = rope_segments.size() - 2
var pop : bool = false
#var pop : bool = false
while counter >= 0:
#print("looping")
if rope_segments[counter].rope_ray.is_colliding(): # safety check
var temp_col_point : Vector2 = rope_segments[counter].rope_ray.get_collision_point()
#var temp_col_point : Vector2 = rope_segments[counter].rope_ray.get_collision_point()
#var temp_dist : float = player.global_position.distance_to(temp_col_point)
#print(rope_segments[counter].conn_point.angle_to_point(player.global_position), " ", rope_segments[counter].connection_angle, " ", angle_valid_release_rope(rope_segments[counter].conn_point.angle_to_point(player.global_position), rope_segments[counter].connection_angle, rope_segments[counter].clockwise))
if rope_segments[counter].conn_point.distance_to(rope_segments[counter].rope_ray.get_collision_point()) < DIST_MARGIN and \
(rope_segments[counter].conn_point.angle_to_point(player.global_position) - rope_segments[counter].connection_angle) * (1 if rope_segments[counter].clockwise else -1) > 0: # if the collision of the other ray is longer (so it can see the earlier connection point)
print("removing ",counter, " ", rope_segments[counter].conn_point.distance_to(rope_segments[counter].rope_ray.get_collision_point()))
angle_valid_release_rope(rope_segments[counter].conn_point.angle_to_point(player.global_position), rope_segments[counter].connection_angle, rope_segments[counter].clockwise): # if the collision of the other ray is longer (so it can see the earlier connection point)
#print("removing ",counter, " ", rope_segments[counter].conn_point.distance_to(rope_segments[counter].rope_ray.get_collision_point()))
player.connection_point = rope_segments[counter].conn_point
player.rope_length = player.global_position.distance_to(player.connection_point)
shift_pop_rope_seg()
counter -= 1
else:
break
else:
break
#print("exit")
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta: float) -> void:

View File

@ -36,7 +36,7 @@ func update_sprite_heading(global_pos: Vector2) -> void:
var tile_count = int(distance/tileSize)+1
#print(distance, " ", tile_count)
var child_count : int = rope_sprite.get_child_count()
var count : int = 0
#var count : int = 0
if child_count > tile_count:

View File

@ -1,7 +1,7 @@
extends Control
@onready var play: Button = %Play
@onready var options: Button = %Options
#@onready var options: Button = %Options
@onready var credits: Button = %Credits
@onready var quit: Button = %Quit

View File

@ -1,7 +1,7 @@
extends Node2D
@onready var this_scene = load("res://scenes/universe/universe.tscn")
@onready var this_scene = load("res://world/universe/universe.tscn")
@onready var main_menu_scene = load("res://ui/main menu/main_menu.tscn")
@onready var level_one = load("res://world/world_level/level.tscn")