|
@@ -1,13 +1,108 @@
|
|
|
-[gd_scene load_steps=7 format=2]
|
|
|
+[gd_scene load_steps=8 format=2]
|
|
|
|
|
|
-[ext_resource path="res://enemy.gd" type="Script" id=1]
|
|
|
-[ext_resource path="res://damage_enemy.tscn" type="PackedScene" id=2]
|
|
|
-[ext_resource path="res://enemiplayerdetect.gd" type="Script" id=3]
|
|
|
+[sub_resource type="GDScript" id=5]
|
|
|
+script/source = "extends KinematicBody2D
|
|
|
+
|
|
|
+export var vida = 2
|
|
|
+export var speed = 70
|
|
|
+export var type = 1
|
|
|
+
|
|
|
+var enemy_id = 0
|
|
|
+
|
|
|
+var bullet = preload('res://bullet.tscn')
|
|
|
+
|
|
|
+func damage(arg, id):
|
|
|
+ vida += arg
|
|
|
+ get_tree().get_nodes_in_group('server')[0]._enemy_dmg(enemy_id)
|
|
|
+ if vida <= 0:
|
|
|
+ get_tree().get_nodes_in_group('enemy_authority')[0].death_count(id)
|
|
|
+ queue_free()
|
|
|
+
|
|
|
+var motion = Vector2()
|
|
|
+var target
|
|
|
+onready var reaction_time = int(rand_range(20,60))
|
|
|
+
|
|
|
+var dir_buffer = 0
|
|
|
+
|
|
|
+var tick = 20
|
|
|
+export var tickrate = 4
|
|
|
+var state = 'runaround'
|
|
|
+var fliph = false
|
|
|
+
|
|
|
+func _physics_process(delta):
|
|
|
+ tick += 1
|
|
|
+ if fmod(tick,tickrate) == 0:
|
|
|
+ match state:
|
|
|
+ 'runaround':
|
|
|
+ type = 0 if motion.x == 0 else 1
|
|
|
+ fliph = motion.x > 0 and motion.x != 0
|
|
|
+ if target == null: _ready()
|
|
|
+ if target == null: return
|
|
|
+ dir_buffer += 1
|
|
|
+ if fmod(dir_buffer,reaction_time) == 0:
|
|
|
+ if is_instance_valid(target): motion.x = (target.global_position - global_position).normalized().x * speed
|
|
|
+ motion.y += 15
|
|
|
+ if motion.y > 0 and is_on_floor(): motion.y = 0
|
|
|
+ move_and_slide(motion*tickrate,Vector2.UP)
|
|
|
+ 'shooting':
|
|
|
+ type = 2
|
|
|
+ if fmod(tick,75) == 0:
|
|
|
+ var instance = bullet.instance()
|
|
|
+ instance.motion.x = 200 if fliph else -200
|
|
|
+ instance.global_position = global_position + Vector2(0,-8)
|
|
|
+ instance.id = name
|
|
|
+ instance.dmg = 10
|
|
|
+ instance.target = 'player'
|
|
|
+ get_tree().get_nodes_in_group('proj')[0].add_child(instance)
|
|
|
+
|
|
|
+func _on_Area2D_body_entered(body):
|
|
|
+ print(body)
|
|
|
+ if body.is_in_group('players'):
|
|
|
+ var array = get_tree().get_nodes_in_group('players')
|
|
|
+ array.shuffle()
|
|
|
+ if array.size() > 0:
|
|
|
+ target = array[0]
|
|
|
+ pass # Replace with function body.
|
|
|
+"
|
|
|
+
|
|
|
+[sub_resource type="GDScript" id=6]
|
|
|
+script/source = "extends Area2D
|
|
|
+
|
|
|
+export var damage = -1
|
|
|
+var attacker = ''
|
|
|
+
|
|
|
+func _on_Timer_timeout():
|
|
|
+ queue_free()
|
|
|
+ pass # Replace with function body.
|
|
|
+
|
|
|
+func _on_damage_player_body_entered(area):
|
|
|
+ area.damage( damage, attacker)
|
|
|
+ pass # Replace with function body.
|
|
|
+"
|
|
|
+
|
|
|
+[sub_resource type="RectangleShape2D" id=1]
|
|
|
+
|
|
|
+[sub_resource type="GDScript" id=7]
|
|
|
+script/source = "extends Area2D
|
|
|
+
|
|
|
+func _on_damage_enemy2_body_entered(body):
|
|
|
+ get_parent().fliph = not get_parent().global_position.x > body.global_position.x
|
|
|
+ if get_parent().is_on_floor():
|
|
|
+ get_parent().state = 'shooting'
|
|
|
+ pass # Replace with function body.
|
|
|
+
|
|
|
+func _on_damage_enemy2_body_exited(body):
|
|
|
+ get_parent().state = 'runaround'
|
|
|
+ pass # Replace with function body.
|
|
|
+
|
|
|
+func _ready():
|
|
|
+ scale.x = rand_range(0.5,2.0)
|
|
|
+"
|
|
|
|
|
|
[sub_resource type="RectangleShape2D" id=3]
|
|
|
extents = Vector2( 120, 10 )
|
|
|
|
|
|
-[sub_resource type="RectangleShape2D" id=1]
|
|
|
+[sub_resource type="RectangleShape2D" id=4]
|
|
|
|
|
|
[sub_resource type="RectangleShape2D" id=2]
|
|
|
extents = Vector2( 320, 100 )
|
|
@@ -15,25 +110,29 @@ extents = Vector2( 320, 100 )
|
|
|
[node name="Enemy" type="KinematicBody2D" groups=["enemy"]]
|
|
|
collision_layer = 12
|
|
|
collision_mask = 0
|
|
|
-script = ExtResource( 1 )
|
|
|
-tickrate = 3
|
|
|
+script = SubResource( 5 )
|
|
|
|
|
|
-[node name="damage_enemy" parent="." instance=ExtResource( 2 )]
|
|
|
+[node name="damage_enemy" type="Area2D" parent="."]
|
|
|
+collision_layer = 0
|
|
|
+collision_mask = 2147483650
|
|
|
monitorable = false
|
|
|
-damage = -10
|
|
|
+script = SubResource( 6 )
|
|
|
|
|
|
-[node name="CollisionShape2D" parent="damage_enemy" index="0"]
|
|
|
+[node name="CollisionShape2D" type="CollisionShape2D" parent="damage_enemy"]
|
|
|
+shape = SubResource( 1 )
|
|
|
disabled = true
|
|
|
|
|
|
-[node name="damage_enemy2" parent="." instance=ExtResource( 2 )]
|
|
|
+[node name="damage_enemy2" type="Area2D" parent="."]
|
|
|
+collision_layer = 0
|
|
|
+collision_mask = 2147483650
|
|
|
monitorable = false
|
|
|
-script = ExtResource( 3 )
|
|
|
+script = SubResource( 7 )
|
|
|
|
|
|
-[node name="CollisionShape2D" parent="damage_enemy2" index="0"]
|
|
|
+[node name="CollisionShape2D" type="CollisionShape2D" parent="damage_enemy2"]
|
|
|
shape = SubResource( 3 )
|
|
|
|
|
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
|
|
-shape = SubResource( 1 )
|
|
|
+shape = SubResource( 4 )
|
|
|
|
|
|
[node name="Area2D" type="Area2D" parent="."]
|
|
|
collision_layer = 0
|
|
@@ -42,9 +141,8 @@ collision_mask = 2
|
|
|
[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"]
|
|
|
shape = SubResource( 2 )
|
|
|
|
|
|
+[connection signal="body_entered" from="damage_enemy" to="damage_enemy" method="_on_damage_player_body_entered"]
|
|
|
[connection signal="body_entered" from="damage_enemy2" to="damage_enemy2" method="_on_damage_enemy2_body_entered"]
|
|
|
+[connection signal="body_entered" from="damage_enemy2" to="damage_enemy2" method="_on_damage_player_body_entered"]
|
|
|
[connection signal="body_exited" from="damage_enemy2" to="damage_enemy2" method="_on_damage_enemy2_body_exited"]
|
|
|
[connection signal="body_entered" from="Area2D" to="." method="_on_Area2D_body_entered"]
|
|
|
-
|
|
|
-[editable path="damage_enemy"]
|
|
|
-[editable path="damage_enemy2"]
|