Guest User

enemyscript.gd

a guest
May 10th, 2026
75
0
196 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. extends CharacterBody2D
  2.  
  3. @export var move_speed = 300.0
  4. @export var attack_cooldown = 100.0
  5.  
  6. # -------------------------
  7. # FIX: guaranteed loaded projectile
  8. # -------------------------
  9. @onready var projectile_scene: PackedScene = preload("res://Scenes/slash_projectile.tscn")
  10.  
  11. var push_velocity = Vector2.ZERO
  12. var attack_timer = 0.0
  13.  
  14. @onready var player = get_tree().get_first_node_in_group("player")
  15. @onready var combat = $CombatComponent
  16.  
  17.  
  18. func _physics_process(delta):
  19.  
  20. # -------------------------
  21. # HITSTUN
  22. # -------------------------
  23. if combat and combat.is_stunned:
  24. push_velocity = push_velocity.move_toward(Vector2.ZERO, 800 * delta)
  25. velocity = push_velocity
  26. move_and_slide()
  27. return
  28.  
  29. player = get_tree().get_first_node_in_group("player")
  30. if player == null:
  31. return
  32.  
  33. attack_timer -= delta
  34.  
  35. var to_player = player.global_position - global_position
  36. var dist = to_player.length()
  37. var dir = to_player.normalized()
  38.  
  39. rotation = dir.angle()
  40.  
  41. # -------------------------
  42. # MOVEMENT (UNCHANGED)
  43. # -------------------------
  44. var forward = Vector2.RIGHT.rotated(rotation)
  45. var right = Vector2.UP.rotated(rotation)
  46.  
  47. var intent = Vector2.ZERO
  48.  
  49. var ideal_min = 120.0
  50. var ideal_max = 250.0
  51.  
  52. if dist > ideal_max:
  53. intent = forward
  54. elif dist < ideal_min:
  55. intent = -forward
  56.  
  57. var forward_component = intent.dot(forward)
  58. var right_component = intent.dot(right)
  59.  
  60. var move_dir = Vector2.ZERO
  61.  
  62. if forward_component >= 0:
  63. move_dir += forward * forward_component * 2.0
  64. else:
  65. move_dir += forward * forward_component * 0.5
  66.  
  67. move_dir += right * right_component * 1.0
  68.  
  69. var target_velocity = move_dir * move_speed
  70. velocity = target_velocity + push_velocity
  71.  
  72. push_velocity = push_velocity.move_toward(Vector2.ZERO, 800 * delta)
  73.  
  74. # -------------------------
  75. # SHOOTING (SAFE NOW)
  76. # -------------------------
  77. if attack_timer <= 0.0:
  78. shoot()
  79. attack_timer = attack_cooldown
  80.  
  81. move_and_slide()
  82.  
  83.  
  84. # -------------------------
  85. # SHOOT
  86. # -------------------------
  87. func shoot():
  88. var proj = projectile_scene.instantiate()
  89. get_parent().add_child(proj)
  90.  
  91. proj.global_position = global_position
  92.  
  93. var dir = (player.global_position - global_position).normalized()
  94.  
  95. proj.direction = dir
  96. proj.rotation = dir.angle()
  97. proj.source = self
  98.  
Advertisement
Add Comment
Please, Sign In to add comment