enemy.gd 2.1 KB

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