enemy.gd 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. extends KinematicBody2D
  2. var player
  3. var motion = Vector2()
  4. export var speed = 150
  5. export var attackrange = 64
  6. export var reactiontime = 1
  7. var active = false
  8. export var detectionzone = 128
  9. export var exppt = 15
  10. onready var initspeed = Vector2(sin(rand_range(0,TAU)),cos(rand_range(0,TAU)))
  11. func _ready():
  12. player = get_tree().get_nodes_in_group('player')[0]
  13. var array = []
  14. for x in $types.get_animation_list():
  15. array.append(x)
  16. array.shuffle()
  17. while array[0] == 'RESET':
  18. array.shuffle()
  19. $types.play(array[0])
  20. name = array[0]
  21. yield(Timergen.createtime(self,0.1),'timeout')
  22. $Health.health = $Health.health_max
  23. $types.queue_free()
  24. yield(Timergen.createtime(self,5.0),'timeout')
  25. if not $VisibilityNotifier2D.is_visible_in_tree(): queue_free()
  26. pass # Replace with function body.
  27. var delete_buff = 600
  28. func _physics_process(delta):
  29. if player:
  30. for x in range(-1,1):
  31. for y in range(-1,1):
  32. if checkapproxpos(Vector2(x,y)):
  33. active = true
  34. if active:
  35. reactiontime -= 1
  36. if reactiontime == 0:
  37. motion = (player.global_position - global_position).normalized()
  38. reactiontime = 180
  39. $hitbox.position = motion * attackrange
  40. move_and_slide(motion * speed)
  41. $Sprite.rotation = atan2(motion.y * speed,motion.x * speed)
  42. # delete_buff -= 1
  43. # if delete_buff < 0:
  44. # if not $VisibilityNotifier2D.is_visible_in_tree():
  45. # queue_free()
  46. # delete_buff = 600
  47. func checkapproxpos(var offset = Vector2()):
  48. var pos1 = Vector2(int(player.global_position.x/detectionzone), int(player.global_position.y/detectionzone))
  49. var pos2 = Vector2(int(global_position.x/detectionzone), int(global_position.y/detectionzone))
  50. if pos1.y+offset.y == pos2.y+offset.y and pos1.x+offset.x == pos2.x+offset.x:
  51. return true
  52. func _on_VisibilityNotifier2D_screen_exited():
  53. # if not active: queue_free()
  54. pass # Replace with function body.