newai.gd 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. extends KinematicBody2D
  2. var knockback_counter = 25
  3. var knockback_counter_buff = 0
  4. func damage(arg, id):
  5. vida += arg
  6. flash_spriter()
  7. knockback_counter_buff += arg
  8. if knockback_counter_buff < 0:
  9. state = 'knockback'
  10. clock = behaviours[state]
  11. knockback_counter_buff = knockback_counter
  12. get_tree().get_nodes_in_group('server')[0]._enemy_dmg(enemy_id)
  13. if vida <= 0:
  14. state = 'die'
  15. clock = behaviours[state]
  16. get_tree().get_nodes_in_group('enemy_authority')[0].death_count(id)
  17. queue_free()
  18. var enemy_id = 0
  19. export var type = 4
  20. var fliph = 0
  21. export var vida = 2
  22. # Called when the node enters the scene tree for the first time.
  23. var motion = Vector2(0,0)
  24. var target
  25. var target_position_buff
  26. func find_target():
  27. var data = get_tree().get_nodes_in_group('players')
  28. if data.size() > 0:
  29. data.shuffle()
  30. target_position_buff = data[0].global_position
  31. return data[0]
  32. func _ready():
  33. for x in get_tree().get_nodes_in_group('enemycount'):
  34. x.enemycount += 1
  35. enemy_id = x.enemycount
  36. # print(enemy_id)
  37. find_target()
  38. var bullet = preload('res://bullet.tscn')
  39. var firerate = 30
  40. var fireratebuff = 30
  41. var alert = false
  42. var state = 'walk'
  43. var behaviours = {
  44. 'walkleft':120,
  45. 'walkright':120,
  46. 'idle':60,
  47. 'knockback':60,
  48. 'canon':60,
  49. 'die':120,
  50. 'followtarget':120,
  51. 'blowup':60,
  52. }
  53. export var gen = ['walkleft','walkright','idle','canon']
  54. var clock = 1
  55. var onceacycle = true
  56. func sprite_loader(anim,pos,id, auto = false):
  57. for x in get_tree().get_nodes_in_group('server'):
  58. x.spriter_request(anim,pos,id, auto)
  59. func nuker_loader(time):
  60. for x in get_tree().get_nodes_in_group('server'):
  61. x.spriter_nuke_request(time, enemy_id)
  62. func flash_spriter():
  63. for x in get_tree().get_nodes_in_group('server'):
  64. x.flash_spriter(enemy_id)
  65. func _physics_process(delta):
  66. clock -= 1
  67. match state:
  68. 'walkleft':
  69. sprite_loader('walk',global_position,enemy_id)
  70. motion.x = 75
  71. motion.y = 40
  72. 'walkright':
  73. sprite_loader('walk',global_position,enemy_id)
  74. motion.x = -75
  75. motion.y = 40
  76. 'idle':
  77. sprite_loader('idle',global_position,enemy_id)
  78. motion.x = 0
  79. motion.y = 40
  80. 'knockback':
  81. sprite_loader('knockback',global_position,enemy_id)
  82. motion.x = 0
  83. motion.y = 40
  84. 'canon':
  85. sprite_loader('canon',global_position,enemy_id)
  86. if [30,36,42].has(clock) and onceacycle:
  87. var instancer = load('res://enemie/tankcanonball.tscn').instance()
  88. add_child(instancer)
  89. instancer.global_position = $canonpoint.global_position
  90. motion.x = 0
  91. motion.y = 40
  92. 'die':
  93. sprite_loader('die',global_position,enemy_id)
  94. motion.x = 0
  95. 'followtarget':
  96. if target == null:
  97. target = find_target()
  98. return
  99. if motion == Vector2(0,0): motion = (target_position_buff - global_position).normalized() * 300
  100. if clock == 0:
  101. gen.shuffle()
  102. state = gen[0]
  103. clock = behaviours[state]
  104. # print(state)
  105. onceacycle = true
  106. move_and_slide(motion)
  107. func _on_Area2D_body_entered(body):
  108. # sprite_loader('explosion',global_position,enemy_id, true)
  109. if body.is_in_group('player'):
  110. sprite_loader('explosion',global_position,enemy_id, true)
  111. body.damage(-20, enemy_id)
  112. # nuker_loader(1.0)
  113. queue_free()
  114. if body.is_in_group('terrain'):
  115. sprite_loader('explosion',global_position,enemy_id, true)
  116. # nuker_loader(1.0)
  117. queue_free()
  118. pass # Replace with function body.
  119. func _on_Area2D_body_entered_2(body):
  120. if body.is_in_group('player'):
  121. body.damage(-20, enemy_id)
  122. pass # Replace with function body.