Files
Inter-Face-Off/Assets/Scripts/WindowSpawner.cs
2026-01-13 10:54:09 +00:00

61 lines
2.0 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
namespace InterfaceOff
{
public class WindowSpawner : MonoBehaviour
{
private List<Type> 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<WindowInteractions>();
windowBase.Interactions.SetAttachedTo(windowBase);
windowBase.Components = go.GetComponent<WindowComponents>();
windowBase.InstantiateWindowBase();
}
}
}
}