Enemy.tscn 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. [gd_scene load_steps=8 format=2]
  2. [sub_resource type="GDScript" id=5]
  3. script/source = "extends KinematicBody2D
  4. export var vida = 2
  5. export var speed = 70
  6. export var type = 1
  7. var enemy_id = 0
  8. var bullet = preload('res://bullet.tscn')
  9. func damage(arg, id):
  10. vida += arg
  11. get_tree().get_nodes_in_group('server')[0]._enemy_dmg(enemy_id)
  12. if vida <= 0:
  13. get_tree().get_nodes_in_group('enemy_authority')[0].death_count(id)
  14. queue_free()
  15. var motion = Vector2()
  16. var target
  17. onready var reaction_time = int(rand_range(20,60))
  18. var dir_buffer = 0
  19. var tick = 20
  20. export var tickrate = 4
  21. var state = 'runaround'
  22. var fliph = false
  23. func _physics_process(delta):
  24. tick += 1
  25. if fmod(tick,tickrate) == 0:
  26. match state:
  27. 'runaround':
  28. type = 0 if motion.x == 0 else 1
  29. fliph = motion.x > 0 and motion.x != 0
  30. if target == null: _ready()
  31. if target == null: return
  32. dir_buffer += 1
  33. if fmod(dir_buffer,reaction_time) == 0:
  34. if is_instance_valid(target): motion.x = (target.global_position - global_position).normalized().x * speed
  35. motion.y += 15
  36. if motion.y > 0 and is_on_floor(): motion.y = 0
  37. move_and_slide(motion*tickrate,Vector2.UP)
  38. 'shooting':
  39. type = 2
  40. if fmod(tick,75) == 0:
  41. var instance = bullet.instance()
  42. instance.motion.x = 200 if fliph else -200
  43. instance.global_position = global_position + Vector2(0,-8)
  44. instance.id = name
  45. instance.dmg = 10
  46. instance.target = 'player'
  47. get_tree().get_nodes_in_group('proj')[0].add_child(instance)
  48. func _on_Area2D_body_entered(body):
  49. print(body)
  50. if body.is_in_group('players'):
  51. var array = get_tree().get_nodes_in_group('players')
  52. array.shuffle()
  53. if array.size() > 0:
  54. target = array[0]
  55. pass # Replace with function body.
  56. "
  57. [sub_resource type="GDScript" id=6]
  58. script/source = "extends Area2D
  59. export var damage = -1
  60. var attacker = ''
  61. func _on_Timer_timeout():
  62. queue_free()
  63. pass # Replace with function body.
  64. func _on_damage_player_body_entered(area):
  65. area.damage( damage, attacker)
  66. pass # Replace with function body.
  67. "
  68. [sub_resource type="RectangleShape2D" id=1]
  69. [sub_resource type="GDScript" id=7]
  70. script/source = "extends Area2D
  71. func _on_damage_enemy2_body_entered(body):
  72. get_parent().fliph = not get_parent().global_position.x > body.global_position.x
  73. if get_parent().is_on_floor():
  74. get_parent().state = 'shooting'
  75. pass # Replace with function body.
  76. func _on_damage_enemy2_body_exited(body):
  77. get_parent().state = 'runaround'
  78. pass # Replace with function body.
  79. func _ready():
  80. scale.x = rand_range(0.5,2.0)
  81. "
  82. [sub_resource type="RectangleShape2D" id=3]
  83. extents = Vector2( 120, 10 )
  84. [sub_resource type="RectangleShape2D" id=4]
  85. [sub_resource type="RectangleShape2D" id=2]
  86. extents = Vector2( 320, 100 )
  87. [node name="Enemy" type="KinematicBody2D" groups=["enemy"]]
  88. collision_layer = 12
  89. collision_mask = 0
  90. script = SubResource( 5 )
  91. [node name="damage_enemy" type="Area2D" parent="."]
  92. collision_layer = 0
  93. collision_mask = 2147483650
  94. monitorable = false
  95. script = SubResource( 6 )
  96. [node name="CollisionShape2D" type="CollisionShape2D" parent="damage_enemy"]
  97. shape = SubResource( 1 )
  98. disabled = true
  99. [node name="damage_enemy2" type="Area2D" parent="."]
  100. collision_layer = 0
  101. collision_mask = 2147483650
  102. monitorable = false
  103. script = SubResource( 7 )
  104. [node name="CollisionShape2D" type="CollisionShape2D" parent="damage_enemy2"]
  105. shape = SubResource( 3 )
  106. [node name="CollisionShape2D" type="CollisionShape2D" parent="."]
  107. shape = SubResource( 4 )
  108. [node name="Area2D" type="Area2D" parent="."]
  109. collision_layer = 0
  110. collision_mask = 2
  111. [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
  112. shape = SubResource( 2 )
  113. [connection signal="body_entered" from="damage_enemy" to="damage_enemy" method="_on_damage_player_body_entered"]
  114. [connection signal="body_entered" from="damage_enemy2" to="damage_enemy2" method="_on_damage_enemy2_body_entered"]
  115. [connection signal="body_entered" from="damage_enemy2" to="damage_enemy2" method="_on_damage_player_body_entered"]
  116. [connection signal="body_exited" from="damage_enemy2" to="damage_enemy2" method="_on_damage_enemy2_body_exited"]
  117. [connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"]