From 20c127e11dae948db31b3618a9c1cdbc3d65a8a6 Mon Sep 17 00:00:00 2001 From: godzilla5hrimp Date: Thu, 24 Sep 2026 22:22:42 +0200 Subject: [PATCH] feat: add knockback functionality; add the hp to the slime; --- Scenes/Enemies/slime_enemy.gd | 7 +++++-- Scenes/Player/player.gd | 15 +++++++++++++-- Scenes/Player/player.tscn | 3 +-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/Scenes/Enemies/slime_enemy.gd b/Scenes/Enemies/slime_enemy.gd index c503eb4..2537ebd 100644 --- a/Scenes/Enemies/slime_enemy.gd +++ b/Scenes/Enemies/slime_enemy.gd @@ -1,6 +1,9 @@ extends CharacterBody2D @export var speed: int = 300 +@export var acceleration: float = 2 +@export var HP: int = 2 + var target: Node2D func _physics_process(delta): @@ -13,7 +16,8 @@ func move_slime(): var distance_to_player: Vector2 distance_to_player = target.global_position - global_position var direction_normal: Vector2 = distance_to_player.normalized() - velocity = direction_normal * speed + #velocity = direction_normal * speed + velocity = velocity.move_toward(direction_normal * speed, acceleration) func animate_slime(): var normal_velocity: Vector2 = velocity.normalized() @@ -26,7 +30,6 @@ func animate_slime(): elif normal_velocity.y < -0.707: $AnimatedSprite2D.play("move_up") - func _on_player_detect_area_body_entered(body): if body is Player: target = body diff --git a/Scenes/Player/player.gd b/Scenes/Player/player.gd index 5424bf7..2af0288 100644 --- a/Scenes/Player/player.gd +++ b/Scenes/Player/player.gd @@ -4,6 +4,7 @@ class_name Player @export var move_speed: float = 100 @export var hp: int = 10 @export var push_strength: int = 50 +@export var move_acceleration: float = 50 var is_attacking: bool = false # Called when the node enters the scene tree for the first time. @@ -27,7 +28,7 @@ func _physics_process(delta: float) -> void: func move_player(): var move_vector: Vector2 = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down") - velocity = move_vector * move_speed + velocity = velocity.move_toward(move_vector * move_speed, move_acceleration) if velocity.x > 0: $AnimatedSprite2D.play("move_right") @@ -71,13 +72,23 @@ func _on_hit_box_area_2d_body_entered(body: Node2D) -> void: %HealthBar.play(str(SceneManager.player_hp) + "_hp") if SceneManager.player_hp <= 0: die() + var distance_to_player: Vector2 = global_position - body.global_position + var normalize_knockback: Vector2 = distance_to_player.normalized() + print("distancetoplayer: ", distance_to_player) + velocity += normalize_knockback * 500 func die(): get_tree().call_deferred("reload_current_scene") SceneManager.player_hp = 3 func _on_sword_area_2d_body_entered(body: Node2D) -> void: - body.queue_free() + var distance_to_enemy: Vector2 = body.global_position - global_position + var knockback_direction: Vector2 = distance_to_enemy.normalized() + var knockback_strength = 150 + body.velocity += knockback_direction * knockback_strength + body.HP -= 1 + if (body.HP <= 0): + body.queue_free() func attack(): var player_animation: String = $AnimatedSprite2D.animation diff --git a/Scenes/Player/player.tscn b/Scenes/Player/player.tscn index f117b7d..cc7ea8a 100644 --- a/Scenes/Player/player.tscn +++ b/Scenes/Player/player.tscn @@ -195,7 +195,7 @@ radius = 5.0 height = 10.0 [sub_resource type="CircleShape2D" id="CircleShape2D_chgu2"] -radius = 4.0 +radius = 6.0 [sub_resource type="RectangleShape2D" id="RectangleShape2D_chgu2"] size = Vector2(8, 8) @@ -419,7 +419,6 @@ position = Vector2(0, 3) shape = SubResource("CapsuleShape2D_bqpwv") [node name="HitBoxArea2D" type="Area2D" parent="." unique_id=1052547818] -visible = false collision_layer = 2 collision_mask = 16