From 73b6f64f8e8bd2ebd6997d952cf9f65a96786608 Mon Sep 17 00:00:00 2001 From: Jakob Feldmann Date: Sun, 16 Apr 2023 23:32:28 +0200 Subject: [PATCH] fix: Adjusted the stomping mechanic Instead of checking the height of the entry of blobbys hitbox in the enemy stomping area, the success of the stomp now depends on the angle of entry into the stomping area. --- project.godot | 1 - src/Actors/Blobby/BlobbyStateMachine.gd | 3 --- src/Actors/Enemies/Beings/Caterpillar.gd | 2 +- src/Actors/Enemies/Beings/Caterpillar.tscn | 18 ++++++++------- src/Actors/Enemies/Beings/Enemy.gd | 19 ++++++++++------ src/Actors/Enemies/Beings/Flyer.gd | 6 ++--- src/Actors/Enemies/Beings/WhatAreFrog.gd | 26 +++++++++++++--------- src/Levels/Level 1.tscn | 4 ++-- src/Levels/Level 2.tscn | 4 ++-- 9 files changed, 45 insertions(+), 38 deletions(-) diff --git a/project.godot b/project.godot index 27da77b..e654080 100644 --- a/project.godot +++ b/project.godot @@ -61,7 +61,6 @@ GlobalState="*res://src/Autoload/GlobalState.tscn" [debug] settings/fps/force_fps=60 -settings/stdout/print_fps=true [display] diff --git a/src/Actors/Blobby/BlobbyStateMachine.gd b/src/Actors/Blobby/BlobbyStateMachine.gd index 382b681..08b51ba 100644 --- a/src/Actors/Blobby/BlobbyStateMachine.gd +++ b/src/Actors/Blobby/BlobbyStateMachine.gd @@ -140,9 +140,6 @@ func _get_transition(delta): # + String(round(parent.velocity.y / 10)) ) var new_state - print(was_coyote_hanging) - print("timer") - print($CoyoteTimer.wait_time) if !parent.is_on_floor(): if parent.velocity.y < -1: was_coyote_hanging = false diff --git a/src/Actors/Enemies/Beings/Caterpillar.gd b/src/Actors/Enemies/Beings/Caterpillar.gd index 3375c36..a91d892 100644 --- a/src/Actors/Enemies/Beings/Caterpillar.gd +++ b/src/Actors/Enemies/Beings/Caterpillar.gd @@ -24,4 +24,4 @@ func _physics_process(delta: float) -> void: # velocity var v = Vector2(velocity.x * movement, 0) time += delta - move_and_slide_with_snap(v.rotated(rotation), snap.rotated(rotation), FLOOR_NORMAL, false, 4, PI) + move_and_slide_with_snap(v.rotated(rotation), snap.rotated(rotation), FLOOR_NORMAL, false, 4, PI, false) diff --git a/src/Actors/Enemies/Beings/Caterpillar.tscn b/src/Actors/Enemies/Beings/Caterpillar.tscn index af4cfec..b042dee 100644 --- a/src/Actors/Enemies/Beings/Caterpillar.tscn +++ b/src/Actors/Enemies/Beings/Caterpillar.tscn @@ -4,16 +4,16 @@ [ext_resource path="res://src/Actors/Enemies/Beings/Caterpillar.gd" type="Script" id=2] [sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 2.72463, 1.17848 ) +extents = Vector2( 2.64025, 1.15615 ) [sub_resource type="RectangleShape2D" id=2] -extents = Vector2( 18.75, 6.38067 ) +extents = Vector2( 15, 6 ) [sub_resource type="RectangleShape2D" id=3] -extents = Vector2( 14.563, 9.38461 ) +extents = Vector2( 15, 12 ) [node name="Caterpillar" type="KinematicBody2D" groups=["harmful"]] -scale = Vector2( 0.8, 0.5 ) +scale = Vector2( 0.747749, 0.572926 ) collision_layer = 2 collision_mask = 9 script = ExtResource( 2 ) @@ -30,8 +30,8 @@ rect = Rect2( -89, -10, 2, 20 ) process_parent = true physics_process_parent = true -[node name="EnemyBody" type="CollisionShape2D" parent="." groups=["harmful"]] -position = Vector2( 0, 6 ) +[node name="EnemyBody" type="CollisionShape2D" parent="."] +position = Vector2( 6.70552e-07, 6.11815 ) scale = Vector2( 5.68128, 5.29182 ) shape = SubResource( 1 ) @@ -61,21 +61,23 @@ collision_mask = 8 [node name="StompDetector" type="Area2D" parent="." groups=["weakpoint"]] modulate = Color( 0, 0.0392157, 1, 1 ) +light_mask = 0 position = Vector2( 0, -6.44095 ) collision_layer = 2 input_pickable = false monitorable = false [node name="CollisionShape2D" type="CollisionShape2D" parent="StompDetector"] -position = Vector2( 0, 0.0602803 ) +position = Vector2( 0, 0.440949 ) shape = SubResource( 2 ) [node name="EnemySkin" type="Area2D" parent="." groups=["player"]] process_priority = -1 +collision_layer = 2 collision_mask = 126 [node name="CollisionPolygon2D" type="CollisionShape2D" parent="EnemySkin"] -position = Vector2( 0, 3.76 ) +position = Vector2( -5.54991e-05, 0 ) scale = Vector2( 1.03, 1.04 ) shape = SubResource( 3 ) diff --git a/src/Actors/Enemies/Beings/Enemy.gd b/src/Actors/Enemies/Beings/Enemy.gd index ec57d8d..1f5e3a3 100644 --- a/src/Actors/Enemies/Beings/Enemy.gd +++ b/src/Actors/Enemies/Beings/Enemy.gd @@ -2,17 +2,22 @@ extends Actor class_name Enemy func _on_StompDetector_body_entered(body: Node) -> void: - if body.global_position.y > get_node("StompDetector").global_position.y: + if !body.is_in_group("player"): return - if body.is_in_group("player"): - signalManager.emit_signal("got_stomped") - remove_from_group("harmful") - $StompDetector.remove_from_group("weakpoint") - get_node("EnemyBody").disabled = true - die() + var incoming_vel_vector: Vector2 = body.velocity.normalized() + print(rad2deg(abs(incoming_vel_vector.angle_to(Vector2.DOWN.rotated(rotation))))) + if abs(incoming_vel_vector.angle_to(Vector2.DOWN.rotated(rotation))) > deg2rad(40): + print("too shallow entry") + return + signalManager.emit_signal("got_stomped") + remove_from_group("harmful") + $StompDetector.remove_from_group("weakpoint") + get_node("EnemyBody").disabled = true + die() func die() -> void: queue_free() + # TODO make batterr levelState.kills += 1 func _on_EnemySkin_area_entered(area:Area2D) -> void: diff --git a/src/Actors/Enemies/Beings/Flyer.gd b/src/Actors/Enemies/Beings/Flyer.gd index 21b96b5..41b8961 100644 --- a/src/Actors/Enemies/Beings/Flyer.gd +++ b/src/Actors/Enemies/Beings/Flyer.gd @@ -87,7 +87,7 @@ func hunting() -> Vector2: func detect_player() -> void: var player if(players.empty()): - print("no player found") + # print("no player found") return player = players[0] #TODO Depends on height of blobby sprite since blobbys bottom and not his middle is on y=0 @@ -98,7 +98,7 @@ func detect_player() -> void: if(abs(ray_angle_to_facing) < PI/2-deg2rad(blindspot_angle) && collider != null && collider.is_in_group("player")): target_lost_timer.stop() target = collider - print("target found") + # print("target found") elif(target != null && target_lost_timer.is_stopped()): target_lost_timer.start(loose_target_seconds) @@ -147,7 +147,7 @@ func check_feeler(v: Vector2, _offset = Vector2(0,0)) -> Object: return feeler_raycast.get_collider() func lose_target() -> void: - print("flyer target lost") + # print("flyer target lost") target = null func update_navigation() -> void: diff --git a/src/Actors/Enemies/Beings/WhatAreFrog.gd b/src/Actors/Enemies/Beings/WhatAreFrog.gd index c2df2aa..86ad5be 100644 --- a/src/Actors/Enemies/Beings/WhatAreFrog.gd +++ b/src/Actors/Enemies/Beings/WhatAreFrog.gd @@ -69,15 +69,18 @@ func bind_to_anchor(anchor_node: Node2D, radius: float ) -> void: func _on_StompDetector_body_entered(body: Node) -> void: - if body.global_position.y - 1 > get_node("StompDetector").global_position.y: + if !body.is_in_group("player"): return - if body.is_in_group("player") && !is_hurt: - remove_from_group("harmful") - $StompDetector.remove_from_group("weakpoint") - signalManager.emit_signal("got_stomped") - is_hurt = true - $HurtTimer.start() - $FrogSprite.material = invincible_shader + var incoming_vel_vector: Vector2 = body.velocity.normalized() + print(rad2deg(abs(incoming_vel_vector.angle_to(Vector2.DOWN.rotated(rotation))))) + if abs(incoming_vel_vector.angle_to(Vector2.DOWN.rotated(rotation))) > deg2rad(50): + print("too shallow entry") + return + signalManager.emit_signal("got_stomped") + remove_from_group("harmful") + $StompDetector.remove_from_group("weakpoint") + get_node("EnemyBody").disabled = true + die() @@ -217,7 +220,7 @@ func detect_food() -> void: func detect_player() -> void: var player if(players.empty()): - print("no player found") + # print("no player found") return player = players[0] #TODO Depends on height of blobby sprite since blobbys bottom and not his middle is on y=0 @@ -239,7 +242,7 @@ func sleeping() -> Vector2: func loose_target() -> void: - print("frog target lost") + # print("frog target lost") target = null food_target = null @@ -307,7 +310,7 @@ func consider_jump_headspace(v: Vector2) -> Vector2: if(height_collider != null): var collision_point = feeler_raycast.get_collision_point() var target_height = collision_point.y - (feeler_raycast.global_position.y - 23) - print(feeler_raycast.global_position) + # print(feeler_raycast.global_position) var new_angle = angle * (0.75 if target_height > -26 else 0.95) var new_distance = default_jump_distance * (0.66 if target_height > -26 else 0.75) v = velocity_for_jump_distance(new_distance, abs(new_angle)) @@ -496,4 +499,5 @@ func get_facing_direction() -> float: func _on_HurtTimer_timeout() -> void: is_hurt = false + add_to_group("harmful") $FrogSprite.material = null diff --git a/src/Levels/Level 1.tscn b/src/Levels/Level 1.tscn index cdfa8f7..519662b 100644 --- a/src/Levels/Level 1.tscn +++ b/src/Levels/Level 1.tscn @@ -36,10 +36,10 @@ unique_name_in_owner = true drag_margin_bottom = 0.3 [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 5 +frame = 10 [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 5 +frame = 10 [node name="Blobby" parent="." instance=ExtResource( 8 )] unique_name_in_owner = true diff --git a/src/Levels/Level 2.tscn b/src/Levels/Level 2.tscn index a2dc8cb..86f5a30 100644 --- a/src/Levels/Level 2.tscn +++ b/src/Levels/Level 2.tscn @@ -44,10 +44,10 @@ unique_name_in_owner = true drag_margin_bottom = 0.3 [node name="AnimatedSprite" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="4"] -frame = 1 +frame = 11 [node name="AnimatedSprite2" parent="BlobbyCam/ParallaxBackground/ParallaxLayer5" index="5"] -frame = 1 +frame = 11 [node name="Blobby" parent="." instance=ExtResource( 9 )] unique_name_in_owner = true