Here is the code for cloning obstacles in MainScene.gd
export (PackedScene) var HoriLeft #Obstacle type 1
export (PackedScene) var HoriLeftSmall #Obstacle type 2
export (PackedScene) var HoriRight #Obstacle type 3
export (PackedScene) var HoriRightSmall #Obstacle type 4
var HoriLeftIns : EnemyClass #is a Script attached to enemy
var HoriLeftSmallIns : EnemyClass
var HoriRightIns : EnemyClass
var HoriRightSmallIns : EnemyClass
func _ready():
HoriLeftIns = HoriLeft.instance()
HoriLeftSmallIns = HoriLeftSmall.instance()
HoriRightIns = HoriRight.instance()
HoriRightSmallIns = HoriRightSmall.instance()
func _on_MobTimer_timeout():
if player:
var block_type = Globals.blocks_list[randi()%Globals.blocks_list.size()]
if block_type == "ls":
var enemy : EnemyClass = HoriLeftSmallIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy)
enemy.move_enemy(player.position)
elif block_type == "rs":
var enemy : EnemyClass = HoriRightSmallIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy)
enemy.move_enemy(player.position)
elif block_type == "lh":
var enemy : EnemyClass = HoriLeftIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy)
enemy.move_enemy(player.position)
elif block_type == "rh":
var enemy : EnemyClass = HoriRightIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy)
enemy.move_enemy(player.position)
elif block_type == "ls_rs":
var enemy1 : EnemyClass = HoriLeftSmallIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy1)
enemy1.move_enemy(player.position)
var enemy2 : EnemyClass = HoriRightSmallIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy2)
enemy2.move_enemy(player.position)
elif block_type == "ls_rl":
var enemy1 : EnemyClass = HoriLeftSmallIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy1)
enemy1.move_enemy(player.position)
var enemy2 : EnemyClass = HoriRightIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy2)
enemy2.move_enemy(player.position)
elif block_type == "rs_ll":
var enemy1 : EnemyClass = HoriLeftIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy1)
enemy1.move_enemy(player.position)
var enemy2 : EnemyClass = HoriRightSmallIns.duplicate()
get_tree().get_root().call_deferred("add_child", enemy2)
enemy2.move_enemy(player.position)
Here is a code for Obstacle Script
extends Area2D
class_name EnemyClass
var move = false
var move_position = Vector2()
var screen_size
signal enemy_killed
onready var sprite = $Sprite
func _ready():
screen_size = get_viewport_rect().size
sprite.modulate = Globals.enemy_color
func _process(delta):
if move and Globals.State == Globals.GameState.Running:
position.y += Globals.speed * delta
func move_enemy(dest_position):
#enemy starting position
var randomPosition = Vector2()
var random = RandomNumberGenerator.new()
random.randomize()
#Enemy moving towards player
move_position = dest_position
move = true