diff --git a/src/Actors/BlobbyCam.tscn b/src/Actors/BlobbyCam.tscn index 09b387a..1229a6c 100644 --- a/src/Actors/BlobbyCam.tscn +++ b/src/Actors/BlobbyCam.tscn @@ -511,10 +511,10 @@ texture = ExtResource( 8 ) [node name="AnimatedSprite" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"] visible = false frames = SubResource( 7 ) -frame = 8 +frame = 10 playing = true [node name="AnimatedSprite2" type="AnimatedSprite" parent="ParallaxBackground/ParallaxLayer5"] frames = SubResource( 8 ) -frame = 13 +frame = 1 playing = true diff --git a/src/Actors/Enemies/Beings/BoundFrog.gd b/src/Actors/Enemies/Beings/BoundFrog.gd index 48e7bef..dfbb0f0 100644 --- a/src/Actors/Enemies/Beings/BoundFrog.gd +++ b/src/Actors/Enemies/Beings/BoundFrog.gd @@ -16,7 +16,7 @@ func _on_LevelTemplate_ready() -> void: rope.rope_start = get_node("WhatAreFrog") rope.rope_end_joint = get_node("RopeAnchor/cshape/pjoint") rope.rope_start_joint = get_node("WhatAreFrog/cshape/pjoint") - rope.spawn_rope($WhatAreFrog.global_position, $RopeAnchor.global_position, false) + rope.spawn_rope($WhatAreFrog.global_position, $RopeAnchor.global_position, movement_radius, false) $WhatAreFrog.bind_to_anchor($RopeAnchor, movement_radius) @@ -37,7 +37,7 @@ func _on_WhatAreFrog_child_exiting_tree(node:Node) -> void: rope.rope_start = anchor rope.rope_end_joint = get_node("RopeAnchor/cshape/pjoint") rope.rope_start_joint = anchor.get_node("cshape/pjoint") - rope.spawn_rope(anchor.global_position, $RopeAnchor.global_position, false) + rope.spawn_rope(anchor.global_position, $RopeAnchor.global_position, movement_radius * 10, false) is_first_signal = false # rope.rope_start = anchor # anchor.global_position = rope.rope_start_joint.global_position diff --git a/src/Actors/Enemies/Beings/BoundFrog.tscn b/src/Actors/Enemies/Beings/BoundFrog.tscn index 472a7f5..26356d3 100644 --- a/src/Actors/Enemies/Beings/BoundFrog.tscn +++ b/src/Actors/Enemies/Beings/BoundFrog.tscn @@ -6,11 +6,12 @@ [node name="BoundFrog" type="Node2D"] script = ExtResource( 3 ) +movement_radius = 100 [node name="WhatAreFrog" parent="." instance=ExtResource( 1 )] [node name="RopeAnchor" parent="." instance=ExtResource( 2 )] -position = Vector2( -136, 11 ) +position = Vector2( -80, 9 ) [connection signal="child_exiting_tree" from="WhatAreFrog" to="." method="_on_WhatAreFrog_child_exiting_tree"] diff --git a/src/Actors/Enemies/Beings/WhatAreFrog.gd b/src/Actors/Enemies/Beings/WhatAreFrog.gd index d638909..8a9987d 100644 --- a/src/Actors/Enemies/Beings/WhatAreFrog.gd +++ b/src/Actors/Enemies/Beings/WhatAreFrog.gd @@ -10,9 +10,14 @@ var movement_radius: float var anchor: Node2D var is_bound := false -var start_x := 0 +var start_x := 0.0 var in_air := false var is_hurt := false +var stored_x_vel = 0.0 + +var current_delta = 0.0 + +var reversing_possible_searching := true func _ready(): jump_timer = Timer.new() @@ -20,42 +25,38 @@ func _ready(): jump_timer.connect("timeout", self, "jump") add_child(jump_timer) + func bind_to_anchor(anchor_node: Node2D, radius: float ) -> void: anchor = anchor_node movement_radius = radius is_bound = true -# TODO adapt to groups -# TODO Engine error here(what does it WANT???) + func _on_StompDetector_body_entered(body: Node) -> void: if body.global_position.y > get_node("StompDetector").global_position.y: return if body.is_in_group("player"): remove_from_group("harmful") is_hurt = true - - + + func execute_movement(delta: float) -> void: + current_delta = delta velocity.y += _gravity * delta - if sign(velocity.x) != orientation.cast_to.x: - velocity.x *= -1 if(is_bound): - var next_position = global_position + velocity*delta - var distance_to_anchor = global_position.distance_to(anchor.global_position) + var next_position = global_position + velocity * current_delta + var current_distance = global_position.distance_to(anchor.global_position) var new_distance = next_position.distance_to(anchor.global_position) - if(new_distance > movement_radius): - velocity = velocity/2 - orientation.cast_to.x *= -1 + if(current_distance >= movement_radius && new_distance > current_distance): + velocity.x = velocity.x * 0.8 velocity = move_and_slide(velocity, FLOOR_NORMAL, false, 4, 0.785398,false) if(is_on_floor()): velocity = Vector2(0,0) - if ($Left_Wallcast.is_colliding() || $Right_Wallcast.is_colliding()) && is_on_floor(): - orientation.cast_to.x *= -1 + # Reverse direction when hitting limit func die() -> void: GlobalState.score += score - queue_free() @@ -75,8 +76,10 @@ func searching() -> Vector2: else: if(!in_air): start_x = global_position.x + reversing_possible_searching = true jump_timer.stop() in_air = true + return velocity @@ -89,10 +92,43 @@ func jump(): var v: Vector2 = velocity_for_jump_distance() var jump_height = (pow(v.length(), 2) * pow(sin(deg2rad(65)),2))/(2*_gravity) print("Jump height: ", jump_height) - $CeilingRayCast.cast_to = Vector2(1.5*24 * sign(orientation.cast_to.x), - jump_height) + $CeilingRayCast.cast_to = Vector2(1.5*24 * get_facing_direction(), - jump_height) velocity = v + if(is_bound): + var next_position = global_position + velocity * get_facing_direction() * current_delta + var current_distance = global_position.distance_to(anchor.global_position) + var new_distance = next_position.distance_to(anchor.global_position) + print(current_distance) + print(new_distance) + if(new_distance >= movement_radius && new_distance > current_distance): + if can_reverse_facing_direction(): + reverse_facing_direction() + elif (($Left_Wallcast.is_colliding() || $Right_Wallcast.is_colliding()) && can_reverse_facing_direction()): + reverse_facing_direction() + elif (($Left_Wallcast.is_colliding() || $Right_Wallcast.is_colliding()) && can_reverse_facing_direction()): + reverse_facing_direction() + + if sign(velocity.x) != get_facing_direction(): + velocity.x *= -1 + func velocity_for_jump_distance(distance: float = 3*24, angle: float = deg2rad(65)) -> Vector2: var abs_velocity = sqrt((distance * _gravity)/sin(2*angle)) return Vector2(abs_velocity,0).rotated(-1*angle) + + +func can_reverse_facing_direction() -> bool: + if(is_on_floor()): + return true + return false + + +func reverse_facing_direction() -> void: + print("reversing direction") + orientation.cast_to.x *= -1 + pass + + +func get_facing_direction() -> float: + return orientation.cast_to.x diff --git a/src/Contraptions/Rope/Rope.gd b/src/Contraptions/Rope/Rope.gd index 7ea9528..9d7e449 100644 --- a/src/Contraptions/Rope/Rope.gd +++ b/src/Contraptions/Rope/Rope.gd @@ -6,6 +6,8 @@ var piece_length := 2.0 var rope_close_tolerance := 2.0 var rope_pieces := [] var rope_piece_positions : PoolVector2Array= [] +var anchor_distance := 1.0 +var movement_radius := 1.0 export var mouse_follow := false @@ -20,10 +22,11 @@ func _physics_process(_delta: float) -> void: rope_end.global_position = get_global_mouse_position() 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, new_anchors: bool = true): +func spawn_rope(start_pos: Vector2, end_pos: Vector2, m_radius: float = 10000, new_anchors: bool = true): if(new_anchors): rope_start = RopeAnchor.instance() rope_end = RopeAnchor.instance() @@ -33,8 +36,9 @@ func spawn_rope(start_pos: Vector2, end_pos: Vector2, new_anchors: bool = true): add_child(rope_end, true) rope_start.global_position = start_pos rope_end.global_position = end_pos - var dist = start_pos.distance_to(end_pos) - var pieces_amount = round(dist / piece_length) + movement_radius = m_radius + anchor_distance = start_pos.distance_to(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) @@ -76,4 +80,8 @@ func get_piece_positions() -> Array: return rope_points func _draw() -> void: - draw_polyline(rope_piece_positions, Color.blue, 1.2) + draw_polyline( + rope_piece_positions, + Color(Color.green.linear_interpolate(Color.red, anchor_distance/max(1.0, movement_radius))), + 1.2 + ) \ No newline at end of file diff --git a/src/Contraptions/Rope/RopeAnchor.tscn b/src/Contraptions/Rope/RopeAnchor.tscn index b90de95..d61f16f 100644 --- a/src/Contraptions/Rope/RopeAnchor.tscn +++ b/src/Contraptions/Rope/RopeAnchor.tscn @@ -11,7 +11,8 @@ collision_layer = 256 collision_mask = 8 input_pickable = true mode = 1 -mass = 0.01 +mass = 5.72 +gravity_scale = 3.0 linear_damp = 1.0 angular_damp = 1.0 diff --git a/src/Contraptions/Rope/RopePiece.tscn b/src/Contraptions/Rope/RopePiece.tscn index a6136d4..4f09049 100644 --- a/src/Contraptions/Rope/RopePiece.tscn +++ b/src/Contraptions/Rope/RopePiece.tscn @@ -9,6 +9,7 @@ height = 1.0 [node name="RigidBody2D" type="RigidBody2D"] collision_layer = 256 collision_mask = 8 +gravity_scale = 3.0 linear_damp = 1.0 angular_damp = 1.0 script = ExtResource( 1 ) diff --git a/src/Levels/01 Level.tscn b/src/Levels/01 Level.tscn index 7ed18c1..0c04c20 100644 --- a/src/Levels/01 Level.tscn +++ b/src/Levels/01 Level.tscn @@ -27,6 +27,9 @@ wait_time = 20.0 [node name="BlobbyCam" parent="." instance=ExtResource( 12 )] [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] +frame = 1 + +[node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] frame = 11 [node name="Blobby" parent="." instance=ExtResource( 2 )] diff --git a/src/Levels/Enemy Test Level.tscn b/src/Levels/Enemy Test Level.tscn index 3a2f203..e4f54e6 100644 --- a/src/Levels/Enemy Test Level.tscn +++ b/src/Levels/Enemy Test Level.tscn @@ -62,9 +62,6 @@ position = Vector2( 492, 804 ) [node name="DartingEnemy" parent="." instance=ExtResource( 8 )] position = Vector2( 800, 875 ) -[node name="Spikes" parent="." instance=ExtResource( 4 )] -position = Vector2( -180, 900 ) - [node name="Spikes3" parent="." instance=ExtResource( 4 )] position = Vector2( 108, 900 ) @@ -77,9 +74,6 @@ position = Vector2( 132, 900 ) [node name="Spikes6" parent="." instance=ExtResource( 4 )] position = Vector2( 348, 900 ) -[node name="Spikes2" parent="." instance=ExtResource( 4 )] -position = Vector2( -156, 900 ) - [node name="TileMap" type="TileMap" parent="."] tile_set = SubResource( 2 ) cell_size = Vector2( 24, 24 ) @@ -90,4 +84,4 @@ collision_friction = 0.0 collision_layer = 8 collision_mask = 0 format = 1 -tile_data = PoolIntArray( 1179634, 1, 0, 1245170, 1, 0, 1310706, 1, 0, 1376242, 1, 0, 1441778, 1, 0, 1507314, 1, 0, 1572850, 1, 0, 1638386, 1, 0, 1703922, 1, 0, 1769458, 1, 0, 1834994, 1, 0, 1900530, 1, 0, 1966066, 1, 0, 1966069, 536870912, 0, 1966071, 1, 0, 1900544, 0, 0, 2031602, 1, 0, 2031603, 1, 0, 2031604, 1, 0, 2031605, 1, 0, 2031606, 1, 0, 2031607, 1, 0, 1966080, 0, 0, 2097138, 1, 0, 2097139, 1, 0, 2097140, 1, 0, 2097141, 1, 0, 2097142, 1, 0, 2097143, 1, 0, 2162674, 1, 0, 2162679, 1, 0, 2228210, 1, 0, 2228215, 1, 0, 2228220, 1, 0, 2228221, 1, 0, 2228222, 1, 0, 2228223, 1, 0, 2162688, 1, 0, 2162726, 1, 0, 2293746, 1, 0, 2293751, 1, 0, 2228230, 1, 0, 2228231, 1, 0, 2228232, 1, 0, 2228233, 1, 0, 2228234, 1, 0, 2228235, 1, 0, 2228242, 1, 0, 2228243, 1, 0, 2228244, 1, 0, 2228245, 1, 0, 2228246, 1, 0, 2228262, 1, 0, 2359282, 1, 0, 2359287, 1, 0, 2293798, 1, 0, 2424818, 1, 0, 2424823, 1, 0, 2424827, 1, 0, 2359323, 1, 0, 2359334, 1, 0, 2490354, 1, 0, 2490355, 1, 0, 2490356, 1, 0, 2490357, 1, 0, 2490358, 1, 0, 2490359, 1, 0, 2490362, 1, 0, 2490363, 1, 0, 2490364, 1, 0, 2490365, 1, 0, 2490366, 1, 0, 2490367, 1, 0, 2424832, 1, 0, 2424833, 1, 0, 2424834, 1, 0, 2424835, 1, 0, 2424838, 1, 0, 2424839, 1, 0, 2424840, 1, 0, 2424841, 1, 0, 2424842, 1, 0, 2424843, 1, 0, 2424844, 1, 0, 2424845, 1, 0, 2424848, 1, 0, 2424849, 1, 0, 2424850, 1, 0, 2424851, 1, 0, 2424852, 1, 0, 2424853, 1, 0, 2424854, 1, 0, 2424855, 1, 0, 2424856, 1, 0, 2424857, 1, 0, 2424858, 1, 0, 2424859, 1, 0, 2424860, 1, 0, 2424861, 1, 0, 2424862, 1, 0, 2424863, 1, 0, 2424864, 1, 0, 2424865, 1, 0, 2424866, 1, 0, 2424867, 1, 0, 2424868, 1, 0, 2424869, 1, 0, 2424870, 1, 0, 2555895, 1, 0, 2555896, 1, 0, 2555897, 1, 0, 2555898, 1, 0, 2555899, 1, 0, 2555900, 1, 0, 2555901, 1, 0, 2555902, 1, 0, 2555903, 1, 0, 2490368, 1, 0, 2490369, 1, 0, 2490370, 1, 0, 2490371, 1, 0, 2490372, 1, 0, 2490373, 1, 0, 2490374, 1, 0, 2490375, 1, 0, 2490376, 1, 0, 2490377, 1, 0, 2490378, 1, 0, 2490379, 1, 0, 2490380, 1, 0, 2490381, 1, 0, 2490382, 1, 0, 2490383, 1, 0 ) +tile_data = PoolIntArray( 1179634, 1, 0, 1245170, 1, 0, 1310706, 1, 0, 1376242, 1, 0, 1441778, 1, 0, 1507314, 1, 0, 1572850, 1, 0, 1638386, 1, 0, 1703922, 1, 0, 1769458, 1, 0, 1834994, 1, 0, 1900530, 1, 0, 1966066, 1, 0, 1966069, 536870912, 0, 1966071, 1, 0, 1900544, 0, 0, 2031602, 1, 0, 2031603, 1, 0, 2031604, 1, 0, 2031605, 1, 0, 2031606, 1, 0, 2031607, 1, 0, 1966080, 0, 0, 2097138, 1, 0, 2097139, 1, 0, 2097140, 1, 0, 2097141, 1, 0, 2097142, 1, 0, 2097143, 1, 0, 2162674, 1, 0, 2162679, 1, 0, 2228210, 1, 0, 2228215, 1, 0, 2228220, 1, 0, 2228221, 1, 0, 2228222, 1, 0, 2228223, 1, 0, 2162688, 1, 0, 2162726, 1, 0, 2293746, 1, 0, 2293751, 1, 0, 2228230, 1, 0, 2228231, 1, 0, 2228232, 1, 0, 2228233, 1, 0, 2228234, 1, 0, 2228235, 1, 0, 2228242, 1, 0, 2228243, 1, 0, 2228244, 1, 0, 2228245, 1, 0, 2228246, 1, 0, 2228262, 1, 0, 2359282, 1, 0, 2359287, 1, 0, 2293798, 1, 0, 2424818, 1, 0, 2424823, 1, 0, 2424827, 1, 0, 2359323, 1, 0, 2359334, 1, 0, 2490354, 1, 0, 2490355, 1, 0, 2490356, 1, 0, 2490357, 1, 0, 2490358, 1, 0, 2490359, 1, 0, 2490360, -1073741823, 0, 2490361, -1073741823, 0, 2490362, 1, 0, 2490363, 1, 0, 2490364, 1, 0, 2490365, 1, 0, 2490366, 1, 0, 2490367, 1, 0, 2424832, 1, 0, 2424833, 1, 0, 2424834, 1, 0, 2424835, 1, 0, 2424838, 1, 0, 2424839, 1, 0, 2424840, 1, 0, 2424841, 1, 0, 2424842, 1, 0, 2424843, 1, 0, 2424844, 1, 0, 2424845, 1, 0, 2424848, 1, 0, 2424849, 1, 0, 2424850, 1, 0, 2424851, 1, 0, 2424852, 1, 0, 2424853, 1, 0, 2424854, 1, 0, 2424855, 1, 0, 2424856, 1, 0, 2424857, 1, 0, 2424858, 1, 0, 2424859, 1, 0, 2424860, 1, 0, 2424861, 1, 0, 2424862, 1, 0, 2424863, 1, 0, 2424864, 1, 0, 2424865, 1, 0, 2424866, 1, 0, 2424867, 1, 0, 2424868, 1, 0, 2424869, 1, 0, 2424870, 1, 0, 2555895, 1, 0, 2555896, 1, 0, 2555897, 1, 0, 2555898, 1, 0, 2555899, 1, 0, 2555900, 1, 0, 2555901, 1, 0, 2555902, 1, 0, 2555903, 1, 0, 2490368, 1, 0, 2490369, 1, 0, 2490370, 1, 0, 2490371, 1, 0, 2490372, 1, 0, 2490373, 1, 0, 2490374, 1, 0, 2490375, 1, 0, 2490376, 1, 0, 2490377, 1, 0, 2490378, 1, 0, 2490379, 1, 0, 2490380, 1, 0, 2490381, 1, 0, 2490382, 1, 0, 2490383, 1, 0 ) diff --git a/src/Levels/The Line Level.tscn b/src/Levels/The Line Level.tscn index 29f2d0d..f4b302e 100644 --- a/src/Levels/The Line Level.tscn +++ b/src/Levels/The Line Level.tscn @@ -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( -13, 324 ) +position = Vector2( 231, 203 ) [node name="BlobbyCam" parent="." instance=ExtResource( 11 )] @@ -50,11 +50,14 @@ scale = Vector2( 0.878906, 0.936025 ) parameters/playback = SubResource( 4 ) [node name="BoundFrog" parent="." instance=ExtResource( 12 )] -position = Vector2( 263, 323 ) +position = Vector2( -15.9999, 324 ) scale = Vector2( 0.878906, 0.936025 ) +[node name="WhatAreFrog" parent="BoundFrog" index="0"] +position = Vector2( 54.6132, 0 ) + [node name="RopeAnchor" parent="BoundFrog" index="1"] -position = Vector2( 158.151, 10.6835 ) +position = Vector2( 167.253, 9.61514 ) [node name="Collectibles" type="Node2D" parent="."] visible = false