94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			GDScript
		
	
	
	
	
	
| extends Node
 | |
| 
 | |
| @onready var crates: Node2D = $"../Crates"
 | |
| @onready var triggers: Node2D = $"../Triggers"
 | |
| @onready var coins: Node2D = $"../Coins"
 | |
| @onready var enemies: Node2D = $"../Enemies"
 | |
| @onready var player: Player = $"../CharacterBody2D"
 | |
| @onready var control: Control = $"../CanvasLayer/Control"
 | |
| 
 | |
| var bullet = preload("res://scenes/bullet.tscn")
 | |
| var bulletArray = []
 | |
| var totalAllowedBullets = 7
 | |
| 
 | |
| # Called when the node enters the scene tree for the first time.
 | |
| func _ready() -> void:
 | |
| 	buildLevel()
 | |
| 
 | |
| 
 | |
| # Called every frame. 'delta' is the elapsed time since the previous frame.
 | |
| func _process(delta: float) -> void:
 | |
| 	pass
 | |
| 
 | |
| 
 | |
| func buildLevel() -> void:
 | |
| 	# Reset controller timer
 | |
| 	Gamecontroller.reset()
 | |
| 	# tell the game controller
 | |
| 	Gamecontroller.numberOfCrates(countCrates())
 | |
| 	# Wire up signals
 | |
| 	Gamecontroller.levelCompleteSignal.connect(loadLevel)
 | |
| 	Gamecontroller.destroySignal.connect(destroy)
 | |
| 	Gamecontroller.playerDamage.connect(player._player_damage)
 | |
| 	Gamecontroller.playerDamage.connect(control.healthUpdate)
 | |
| 	Gamecontroller.coinUpdate.connect(control.coinsUpdate)
 | |
| 	Gamecontroller.playerDeath.connect(player._player_death)
 | |
| 	# player connection
 | |
| 	player.deathComplete.connect(Gamecontroller.death)
 | |
| 	# UI signals
 | |
| 	Gamecontroller.countDown.connect(control.timerUpdate)
 | |
| 	
 | |
| 	# Connect trigger signals
 | |
| 	if triggers:
 | |
| 		for obj in triggers.get_children():
 | |
| 			if obj is Trigger:
 | |
| 				obj.triggerFired.connect(Gamecontroller._on_trigger_fired)
 | |
| 	# Connect coin signals
 | |
| 	if coins:
 | |
| 		for obj in coins.get_children():
 | |
| 			if obj is Coin:
 | |
| 				obj.coinCollectedSignal.connect(Gamecontroller._on_coin_collected)
 | |
| 	# Connect enemy signals
 | |
| 	if enemies:
 | |
| 		for obj in enemies.get_children():
 | |
| 			if obj is Slime:
 | |
| 				obj.playerDamageSignal.connect(Gamecontroller._on_player_damage)
 | |
| 				Gamecontroller.enemyHurt.connect(obj.damage)
 | |
| 				Gamecontroller.addEnemyToLevel(obj)
 | |
| 
 | |
| func countCrates()->int:
 | |
| 	# count crates
 | |
| 	var totalCrates = 0
 | |
| 	for obj in crates.get_children():
 | |
| 		if obj is Crate:
 | |
| 			totalCrates += 1
 | |
| 	return totalCrates
 | |
| 
 | |
| func bulletFactory():
 | |
| 	var mybullet
 | |
| 	if bulletArray.size() < totalAllowedBullets:
 | |
| 		#new bullet
 | |
| 		mybullet = bullet.instantiate()
 | |
| 		mybullet.connect("bulletHit", Gamecontroller.bulletDamage)
 | |
| 		owner.add_child(mybullet)
 | |
| 	else:
 | |
| 		#recycled bullet
 | |
| 		mybullet = bulletArray.pop_back()	
 | |
| 	
 | |
| 	bulletArray.push_front(mybullet)
 | |
| 	return mybullet
 | |
| 
 | |
| func makeBullet(position, speed):
 | |
| 	print("Scene manager make bullet")
 | |
| 	var mybullet = bulletFactory()
 | |
| 	mybullet.setSpeed(speed)
 | |
| 	mybullet.transform = position
 | |
| 
 | |
| func loadLevel(level):
 | |
| 	get_tree().call_deferred("change_scene_to_file", level)
 | |
| 
 | |
| func destroy(body):
 | |
| 	if body is Crate:
 | |
| 		Gamecontroller.numberOfCrates(countCrates()-1)
 | |
| 	body.queue_free()
 |