Improved Rope behaviour
The rope now spawns with the appropriate length for the movement radius of the frog. This is also true for the death rope respawn. Looks nice :)
This commit is contained in:
parent
f4889b22a8
commit
35b525dff9
@ -1,6 +1,7 @@
|
||||
extends Node2D
|
||||
|
||||
export var movement_radius = 200
|
||||
# Is given in blocks
|
||||
export var movement_radius = 6
|
||||
|
||||
var Rope = preload("res://src/Contraptions/Rope/Rope.tscn")
|
||||
var RopeAnchor = preload("res://src/Contraptions/Rope/RopeAnchor.tscn")
|
||||
@ -33,11 +34,11 @@ func _on_WhatAreFrog_child_exiting_tree(node:Node) -> void:
|
||||
# For some reason the rope only can be instanced in the parent scene
|
||||
# The scene also has to be ready beforehand
|
||||
get_parent().add_child(rope)
|
||||
rope.rope_end = get_node("RopeAnchor")
|
||||
rope.rope_end = $RopeAnchor
|
||||
rope.rope_start = anchor
|
||||
rope.rope_end_joint = get_node("RopeAnchor/cshape/pjoint")
|
||||
rope.rope_end_joint = $RopeAnchor/cshape/pjoint
|
||||
rope.rope_start_joint = anchor.get_node("cshape/pjoint")
|
||||
rope.spawn_rope(anchor.global_position, $RopeAnchor.global_position, movement_radius * 10, false)
|
||||
rope.spawn_rope(anchor.global_position, $RopeAnchor.global_position, movement_radius, false)
|
||||
is_first_signal = false
|
||||
# rope.rope_start = anchor
|
||||
# anchor.global_position = rope.rope_start_joint.global_position
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
|
||||
[node name="BoundFrog" type="Node2D"]
|
||||
script = ExtResource( 3 )
|
||||
movement_radius = 100
|
||||
movement_radius = 7
|
||||
|
||||
[node name="WhatAreFrog" parent="." instance=ExtResource( 1 )]
|
||||
|
||||
|
||||
@ -9,7 +9,10 @@ onready var jump_timer: Timer
|
||||
onready var target_lost_timer: Timer
|
||||
|
||||
export var score := 100
|
||||
# Is given in blocks
|
||||
export var vision_distance := 6.0
|
||||
|
||||
# Also in blocks
|
||||
var movement_radius: float
|
||||
var anchor: Node2D
|
||||
var is_bound := false
|
||||
@ -37,7 +40,7 @@ func _ready():
|
||||
|
||||
func bind_to_anchor(anchor_node: Node2D, radius: float ) -> void:
|
||||
anchor = anchor_node
|
||||
movement_radius = radius
|
||||
movement_radius = radius * 24
|
||||
is_bound = true
|
||||
|
||||
|
||||
@ -101,7 +104,7 @@ func detect_player() -> void:
|
||||
var player
|
||||
if(!players.empty()):
|
||||
player = players[0]
|
||||
vision_raycast.cast_to = (player.global_position - global_position).normalized() * 100
|
||||
vision_raycast.cast_to = (player.global_position - global_position).normalized() * 24 * vision_distance
|
||||
var ray_angle_to_facing = vision_raycast.cast_to.angle_to(orientation.cast_to)
|
||||
var collider = vision_raycast.get_collider()
|
||||
if(target == null && abs(ray_angle_to_facing) < PI/4 && collider != null && collider.is_in_group("player")):
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
extents = Vector2( 2.72463, 1.17848 )
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=2]
|
||||
extents = Vector2( 15.4794, 6.68174 )
|
||||
extents = Vector2( 13, 5.12039 )
|
||||
|
||||
[sub_resource type="RectangleShape2D" id=3]
|
||||
extents = Vector2( 15.534, 10.0962 )
|
||||
@ -54,7 +54,7 @@ cast_to = Vector2( 0, -13 )
|
||||
collision_mask = 56
|
||||
|
||||
[node name="Orientation" type="RayCast2D" parent="."]
|
||||
cast_to = Vector2( -1, 0 )
|
||||
cast_to = Vector2( 1, 0 )
|
||||
collision_mask = 0
|
||||
collide_with_bodies = false
|
||||
|
||||
@ -97,6 +97,7 @@ collision_layer = 2
|
||||
input_pickable = false
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="StompDetector"]
|
||||
position = Vector2( -4.76837e-07, 1.56134 )
|
||||
shape = SubResource( 2 )
|
||||
|
||||
[node name="EnemySkin" type="Area2D" parent="." groups=["player"]]
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
extends Node2D
|
||||
|
||||
onready var rope_start
|
||||
onready var rope_end
|
||||
onready var rope_start_joint
|
||||
onready var rope_end_joint
|
||||
|
||||
var RopePiece = preload("res://src/Contraptions/Rope/RopePiece.tscn")
|
||||
var RopeAnchor = preload("res://src/Contraptions/Rope/RopeAnchor.tscn")
|
||||
var piece_length := 2.0
|
||||
@ -7,26 +12,23 @@ var rope_close_tolerance := 2.0
|
||||
var rope_pieces := []
|
||||
var rope_piece_positions : PoolVector2Array= []
|
||||
var anchor_distance := 1.0
|
||||
# Is given in blocks
|
||||
var movement_radius := 1.0
|
||||
|
||||
export var mouse_follow := false
|
||||
|
||||
onready var rope_start
|
||||
onready var rope_end
|
||||
onready var rope_start_joint
|
||||
onready var rope_end_joint
|
||||
export var rope_tightness := 0.5
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
#Resize or reinitialize?
|
||||
if(mouse_follow):
|
||||
rope_end.global_position = get_global_mouse_position()
|
||||
# TODO Resize or reinitialize?
|
||||
rope_piece_positions.resize(0)
|
||||
rope_piece_positions = get_piece_positions()
|
||||
anchor_distance = rope_piece_positions[0].distance_to(rope_piece_positions[-1])
|
||||
if !rope_piece_positions.empty():
|
||||
update()
|
||||
|
||||
func spawn_rope(start_pos: Vector2, end_pos: Vector2, m_radius: float = 10000, new_anchors: bool = true):
|
||||
func spawn_rope(start_pos: Vector2, end_pos: Vector2, m_radius: float = 100, new_anchors: bool = true):
|
||||
# The rope should be the defined length even if the anchors are close together/far apart
|
||||
movement_radius = m_radius * 24
|
||||
var mock_end_pos = start_pos + (end_pos - start_pos).normalized() * movement_radius * rope_tightness
|
||||
if(new_anchors):
|
||||
rope_start = RopeAnchor.instance()
|
||||
rope_end = RopeAnchor.instance()
|
||||
@ -34,13 +36,14 @@ func spawn_rope(start_pos: Vector2, end_pos: Vector2, m_radius: float = 10000, n
|
||||
rope_end_joint = rope_end.get_node("cshape/pjoint")
|
||||
add_child(rope_start, true)
|
||||
add_child(rope_end, true)
|
||||
rope_start.global_position = start_pos
|
||||
rope_end.global_position = end_pos
|
||||
movement_radius = m_radius
|
||||
anchor_distance = start_pos.distance_to(end_pos)
|
||||
rope_start.global_position = start_pos
|
||||
rope_end.global_position = mock_end_pos
|
||||
anchor_distance = start_pos.distance_to(mock_end_pos)
|
||||
var pieces_amount = round(anchor_distance / piece_length)
|
||||
var spawn_angle = (end_pos-start_pos).angle() - PI/2
|
||||
create_rope(pieces_amount, rope_start, end_pos, spawn_angle)
|
||||
var spawn_angle = (mock_end_pos-start_pos).angle() - PI/2
|
||||
create_rope(pieces_amount, rope_start, mock_end_pos, spawn_angle)
|
||||
rope_end.global_position = end_pos
|
||||
|
||||
|
||||
func create_rope(pieces_amount: int, last_piece: Object, end_pos: Vector2, spawn_angle: float) -> void:
|
||||
for i in pieces_amount:
|
||||
|
||||
@ -5,3 +5,4 @@
|
||||
[node name="Rope" type="Node2D"]
|
||||
z_index = -1
|
||||
script = ExtResource( 1 )
|
||||
rope_tightness = 0.5
|
||||
|
||||
@ -37,7 +37,7 @@ format = 1
|
||||
tile_data = PoolIntArray( 131099, -1073741822, 0, 262139, -1610612734, 0, 196635, -1073741822, 0, 327675, -1610612734, 0, 262171, -1073741822, 0, 393211, -1610612734, 0, 327707, -1073741822, 0, 458747, -1610612734, 0, 393243, -1073741822, 0, 524283, -1610612734, 0, 458779, -1073741822, 0, 589819, -1610612734, 0, 524315, -1073741822, 0, 655355, -1610612734, 0, 589851, -1073741822, 0, 720891, -1610612734, 0, 655387, -1073741822, 0, 786427, -1610612734, 0, 720923, -1073741822, 0, 851963, -1610612734, 0, 786459, -1073741822, 0, 917499, -1610612734, 0, 851995, -1073741822, 0, 983036, 2, 0, 983037, 2, 0, 983038, 2, 0, 983039, 2, 0, 917504, 2, 0, 917505, 2, 0, 917506, 2, 0, 917507, 2, 0, 917508, 2, 0, 917509, 2, 0, 917510, 2, 0, 917511, 2, 0, 917512, 2, 0, 917513, 2, 0, 917514, 2, 0, 917515, 2, 0, 917516, 2, 0, 917517, 2, 0, 917518, 2, 0, 917519, 2, 0, 917520, 2, 0, 917521, 2, 0, 917522, 2, 0, 917523, 2, 0, 917524, 2, 0, 917525, 2, 0, 917526, 2, 0, 917527, 2, 0, 917528, 2, 0, 917529, 2, 0, 917530, 2, 0 )
|
||||
|
||||
[node name="Spikes" parent="." instance=ExtResource( 13 )]
|
||||
position = Vector2( 231, 203 )
|
||||
position = Vector2( 252, 323 )
|
||||
|
||||
[node name="BlobbyCam" parent="." instance=ExtResource( 11 )]
|
||||
|
||||
@ -50,15 +50,7 @@ scale = Vector2( 0.878906, 0.936025 )
|
||||
parameters/playback = SubResource( 4 )
|
||||
|
||||
[node name="BoundFrog" parent="." instance=ExtResource( 12 )]
|
||||
position = Vector2( 57, 324 )
|
||||
scale = Vector2( 0.878906, 0.936025 )
|
||||
movement_radius = 300
|
||||
|
||||
[node name="WhatAreFrog" parent="BoundFrog" index="0"]
|
||||
position = Vector2( 187.733, 0 )
|
||||
|
||||
[node name="RopeAnchor" parent="BoundFrog" index="1"]
|
||||
position = Vector2( 167.253, 9.61514 )
|
||||
position = Vector2( 200, 323 )
|
||||
|
||||
[node name="Collectibles" type="Node2D" parent="."]
|
||||
visible = false
|
||||
|
||||
Loading…
Reference in New Issue
Block a user