extends KinematicBody2D
var velocity = Vector2.ZERO
var gravity = 300.0
var speed = 200.0
var jump_strength = -300.0
var direction = 1
var jump_timer = 0.0
func _ready():
velocity.x = direction * speed
randomize()
jump_timer = rand_range(1.0, 3.0)
func _physics_process(delta: float) -> void:
velocity.y += gravity * delta
velocity.x = direction * speed
velocity = move_and_slide(velocity, Vector2.UP)
if is_on_wall():
for i in get_slide_count():
var collision = get_slide_collision(i)
var normal = collision.normal
if Vector2(direction, 0).dot(normal) < 0:
direction *= -1
break
if is_on_floor():
jump_timer -= delta
if jump_timer <= 0.0:
velocity.y = jump_strength
jump_timer = rand_range(1.0, 3.0)
# Игрок прыгнул на макушку — враг умирает, игрок отскакивает
func _on_StompDetector_body_entered(body: Node2D) -> void:
if not body is Player:
return
# игрок должен находиться выше верхней точки детектора
if body.global_position.y > $StompDetector.global_position.y:
return
if body.has_method("bounce"):
body.bounce()
die()
# Игрок коснулся врага сбоку или снизу — игрок умирает
func _on_DamageDetector_body_entered(body: Node2D) -> void:
if not body is Player:
return
if body.has_method("die"):
body.die()
func die() -> void:
queue_free()