enemy.gd 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. var dict = {
  12. 'ovomonstro' : 20,
  13. 'besourodourado' : 10,
  14. 'escorpiao' : 10,
  15. }
  16. func _ready():
  17. player = get_tree().get_nodes_in_group('player')[0]
  18. var array = []
  19. for x in $types.get_animation_list():
  20. if dict.has(x):
  21. # print(x)
  22. if dict[x] < player.lv:
  23. array.append(x)
  24. else:
  25. array.append(x)
  26. array.shuffle()
  27. while array[0] == 'RESET':
  28. array.shuffle()
  29. # print(array)
  30. $types.play(array[0])
  31. name = array[0]
  32. yield(Timergen.createtime(self,0.1),'timeout')
  33. $Health.health = $Health.health_max
  34. $types.queue_free()
  35. yield(Timergen.createtime(self,5.0),'timeout')
  36. if not $VisibilityNotifier2D.is_visible_in_tree(): queue_free()
  37. pass # Replace with function body.
  38. var delete_buff = 600
  39. func _physics_process(delta):
  40. if player:
  41. for x in range(-1,1):
  42. for y in range(-1,1):
  43. if checkapproxpos(Vector2(x,y)):
  44. active = true
  45. if active:
  46. reactiontime -= 1
  47. if reactiontime == 0:
  48. motion = (player.global_position - global_position).normalized()
  49. reactiontime = 180
  50. $hitbox.position = motion * attackrange
  51. move_and_slide(motion * speed)
  52. $Sprite.rotation = atan2(motion.y * speed,motion.x * speed)
  53. else:
  54. move_and_slide(initspeed * speed)
  55. $Sprite.rotation = atan2(initspeed.y * speed,initspeed.x * speed)
  56. # delete_buff -= 1
  57. # if delete_buff < 0:
  58. # if not $VisibilityNotifier2D.is_visible_in_tree():
  59. # queue_free()
  60. # delete_buff = 600
  61. func checkapproxpos(var offset = Vector2()):
  62. var pos1 = Vector2(int(player.global_position.x/detectionzone), int(player.global_position.y/detectionzone))
  63. var pos2 = Vector2(int(global_position.x/detectionzone), int(global_position.y/detectionzone))
  64. if pos1.y+offset.y == pos2.y+offset.y and pos1.x+offset.x == pos2.x+offset.x:
  65. return true
  66. func _on_VisibilityNotifier2D_screen_exited():
  67. # if not active: queue_free()
  68. pass # Replace with function body.