Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extends CharacterBody2D
- @export var move_speed = 300.0
- @export var attack_cooldown = 100.0
- # -------------------------
- # FIX: guaranteed loaded projectile
- # -------------------------
- @onready var projectile_scene: PackedScene = preload("res://Scenes/slash_projectile.tscn")
- var push_velocity = Vector2.ZERO
- var attack_timer = 0.0
- @onready var player = get_tree().get_first_node_in_group("player")
- @onready var combat = $CombatComponent
- func _physics_process(delta):
- # -------------------------
- # HITSTUN
- # -------------------------
- if combat and combat.is_stunned:
- push_velocity = push_velocity.move_toward(Vector2.ZERO, 800 * delta)
- velocity = push_velocity
- move_and_slide()
- return
- player = get_tree().get_first_node_in_group("player")
- if player == null:
- return
- attack_timer -= delta
- var to_player = player.global_position - global_position
- var dist = to_player.length()
- var dir = to_player.normalized()
- rotation = dir.angle()
- # -------------------------
- # MOVEMENT (UNCHANGED)
- # -------------------------
- var forward = Vector2.RIGHT.rotated(rotation)
- var right = Vector2.UP.rotated(rotation)
- var intent = Vector2.ZERO
- var ideal_min = 120.0
- var ideal_max = 250.0
- if dist > ideal_max:
- intent = forward
- elif dist < ideal_min:
- intent = -forward
- var forward_component = intent.dot(forward)
- var right_component = intent.dot(right)
- var move_dir = Vector2.ZERO
- if forward_component >= 0:
- move_dir += forward * forward_component * 2.0
- else:
- move_dir += forward * forward_component * 0.5
- move_dir += right * right_component * 1.0
- var target_velocity = move_dir * move_speed
- velocity = target_velocity + push_velocity
- push_velocity = push_velocity.move_toward(Vector2.ZERO, 800 * delta)
- # -------------------------
- # SHOOTING (SAFE NOW)
- # -------------------------
- if attack_timer <= 0.0:
- shoot()
- attack_timer = attack_cooldown
- move_and_slide()
- # -------------------------
- # SHOOT
- # -------------------------
- func shoot():
- var proj = projectile_scene.instantiate()
- get_parent().add_child(proj)
- proj.global_position = global_position
- var dir = (player.global_position - global_position).normalized()
- proj.direction = dir
- proj.rotation = dir.angle()
- proj.source = self
Advertisement
Add Comment
Please, Sign In to add comment