Diffstat (limited to 'enemy/scripts/EnemyClass.gd')
| -rw-r--r-- | enemy/scripts/EnemyClass.gd | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/enemy/scripts/EnemyClass.gd b/enemy/scripts/EnemyClass.gd new file mode 100644 index 0000000..8f08e9d --- /dev/null +++ b/enemy/scripts/EnemyClass.gd @@ -0,0 +1,112 @@ +class_name Enemy +extends Area2D + +var count = 0 +var target +export var drop_power_up = false +export var missile = false +export var ARMOR = 20 +export var score_on_kill = 10 +const ExplosionEffect = preload("res://effects/ExplosionEffect.tscn") +export var Laser = preload("res://bullets/scenes/EnemyLaser.tscn") +export var SPEED = 25 +onready var timer = $Timer +export var shootspeed = 1.5 +var target_destination = Vector2.ZERO +var damagetobesubtracted +export var stop_pos = Vector2(200, 0) +onready var tween = $Tween + + +func _ready(): + target = get_parent().target + timer.wait_time = shootspeed + target_destination = global_position + + +func _process(delta): + if global_position.x > stop_pos.x: + global_position.x -= SPEED * delta + + +func _exit_tree(): + if drop_power_up and randi() % 10 == 2: + var powerUp = preload("res://PowerUp.tscn") + Game.instance_scene_on_main(powerUp, global_position) + + +func damage(): + damagetobesubtracted = rand_range(enemy_damage.min_damage, enemy_damage.max_damage) + damagetobesubtracted = round(damagetobesubtracted) + ARMOR -= damagetobesubtracted + if ARMOR <= 0: + add_to_score() + create_explosion() + queue_free() + + +func _on_Enemy_body_entered(body): + if not body.is_in_group("laser"): + body.create_hit_effect() + if not body.is_in_group("Player"): + body.queue_free() + damage() + + +func _on_Enemy_area_entered(area): + if not area.is_in_group("laser"): + if not area.is_in_group("Player"): + area.create_hit_effect() + area.queue_free() + damage() + + elif area.is_in_group("laser"): + self.visible = true + var beam = get_overlapping_bodies() + if beam != null: + yield(get_tree().create_timer(.4), "timeout") + damage() + + +func add_to_score(): + var main = get_tree().current_scene + if main.is_in_group("World"): + main.score += score_on_kill + + +func create_explosion(): + Game.instance_scene_on_main(ExplosionEffect, global_position) + + +func _on_VisibilityNotifier2D_screen_exited(): + queue_free() + + +func _on_Timer_timeout(): + if not missile: + var laser = Game.instance_scene_on_main(Laser, global_position) + laser.apply_impulse(Vector2.ZERO, Vector2(-50, 0)) + elif missile == true: + var missiles = preload("res://bullets/scenes/missile.tscn") + var m = Game.instance_scene_on_main(missiles, global_position) + m.start(target) + + +func _on_sidestep_timeout(): + var choosing = randi() % 2 + var choice = [30, -30] + target_destination = global_position + Vector2(0, choice[choosing]) + if target_destination.y > 160: + target_destination.y = 160 + elif target_destination.y < 10: + target_destination.y = 10 + tween.interpolate_property( + self, + "position", + global_position, + target_destination, + 1, + Tween.TRANS_LINEAR, + Tween.EASE_IN_OUT + ) + tween.start() |