61 lines
2.0 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|