Загрузка данных


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()