using System; using System.Collections.Generic; using UnityEngine; namespace InterfaceOff { public class WindowSpawner : MonoBehaviour { private List WindowTypes { get; } = new(); [field: SerializeField] private GameObject SampleChild { get; set; } [field: SerializeField] private Canvas GameCanvas { get; set; } private void Awake() { /* Fetches all window types created */ Type[] types = typeof(WindowBase).Assembly.GetTypes(); foreach (Type t in types) { if (t.IsSubclassOf(typeof(WindowBase))) { WindowTypes.Add(t); } } /* Logs the amount of types found and errors if there is none */ Debug.Log($"Found [{WindowTypes.Count}] different window types "); if (WindowTypes.Count == 0) { Debug.LogError("Could not find any window types"); } } private void Update() { if (Input.GetKeyDown(KeyCode.Space)) { /* Creates the gameobject with a random class */ GameObject go = Instantiate(SampleChild, GameCanvas.transform); go.SetActive(true); Type type = WindowTypes.GetRandom(); WindowBase windowBase = go.AddComponent(type) as WindowBase; /* Checks it created correctly before instantiating further */ if (DebugUtils.IsNull(windowBase)) { Debug.LogError("How did this happen"); return; } windowBase.Interactions = go.GetComponent(); windowBase.Interactions.SetAttachedTo(windowBase); windowBase.Components = go.GetComponent(); windowBase.InstantiateWindowBase(); } } } }