123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- extends CharacterBody2D
- const SPEED = 300.0
- const SLIDE = 50.0
- const FORCE = 800.0
- func _physics_process(delta):
- prepare_to_move()
- var collided = move_and_slide()
- if collided:
- try_to_shoot()
- func prepare_to_move():
- if Input.is_action_pressed("ui_right"):
- velocity.x = SPEED
- elif Input.is_action_pressed("ui_left"):
- velocity.x = -SPEED
- else:
- velocity.x = move_toward(velocity.x, 0, SLIDE)
- if Input.is_action_pressed("ui_down"):
- velocity.y = SPEED
- elif Input.is_action_pressed("ui_up"):
- velocity.y = -SPEED
- else:
- velocity.y = move_toward(velocity.y, 0, SLIDE)
- func try_to_shoot():
- var collision = get_last_slide_collision()
- var target = collision.get_collider()
- var normal = collision.get_normal()
- if target is PhysicsBody2D:
- shoot(target, -normal)
- func shoot(target: PhysicsBody2D, dir: Vector2) -> void:
- target.apply_force(dir * FORCE)
|