using Magisterka.BulletHell;
using UnityEngine;
using UnityEngine.UI;
namespace Magisterka.BulletHell
{
///
/// Bootstraps the benchmark bullet hell scene entirely at runtime.
///
public class GameInitializer : MonoBehaviour
{
[SerializeField] private float cameraSize = 6.5f;
private void Awake()
{
BuildCamera();
BuildGame();
}
private void BuildCamera()
{
var cam = Camera.main;
if (cam == null)
{
cam = new GameObject("Main Camera").AddComponent();
}
cam.tag = "MainCamera";
cam.clearFlags = CameraClearFlags.SolidColor;
cam.backgroundColor = Color.black;
cam.orthographic = true;
cam.orthographicSize = cameraSize;
cam.transform.position = new Vector3(0f, 0f, -10f);
}
private void BuildGame()
{
Application.targetFrameRate = 240;
Cursor.visible = false;
var cam = Camera.main;
var bounds = new Vector2(cam.orthographicSize * cam.aspect, cam.orthographicSize);
var root = new GameObject("GameRoot").transform;
root.SetParent(transform, false);
BackgroundScroller.Create(cam, root);
var effectManager = new GameObject("EffectManager").AddComponent();
effectManager.Initialize(root);
var scoreManager = new GameObject("ScoreManager").AddComponent();
var scoreText = CreateScoreUI();
scoreManager.Initialize(scoreText);
var pools = new GameObject("BulletPools").transform;
pools.SetParent(root, false);
var playerPool = BulletPool.Create(pools, "PlayerBullets", new Color(0.35f, 0.9f, 1f, 1f), Faction.Player, 600);
var enemyPool = BulletPool.Create(pools, "EnemyBullets", new Color(1f, 0.4f, 0.2f, 1f), Faction.Enemy, 1200);
var player = PlayerController.CreatePlayer(root, playerPool, bounds);
var spawnerGO = new GameObject("EnemySpawner");
spawnerGO.transform.SetParent(root, false);
var spawner = spawnerGO.AddComponent();
spawner.Initialize(cam, enemyPool, player, bounds);
}
private Text CreateScoreUI()
{
var canvasGO = new GameObject("Canvas");
var canvas = canvasGO.AddComponent