From 8b648fd690edf42d0545a3e35bc8b8d9c6b1dcf4 Mon Sep 17 00:00:00 2001
From: Pasha Bibko <156938226+PashaBibko@users.noreply.github.com>
Date: Tue, 13 Jan 2026 10:23:50 +0000
Subject: [PATCH] Made children spawn
---
.idea/.idea.Inter-Face-Off/.idea/.gitignore | 15 +
.../.idea.Inter-Face-Off/.idea/encodings.xml | 4 +
.../.idea/indexLayout.xml | 8 +
.idea/.idea.Inter-Face-Off/.idea/vcs.xml | 6 +
Assets/Scenes/SampleScene.unity | 262 +++++++++++++++++-
Assets/Scripts.meta | 8 +
Assets/Scripts/BasicWindow.cs | 7 +
Assets/Scripts/BasicWindow.cs.meta | 3 +
Assets/Scripts/Extensions.meta | 3 +
Assets/Scripts/Extensions/ListExtensions.cs | 10 +
.../Scripts/Extensions/ListExtensions.cs.meta | 3 +
Assets/Scripts/NullCheckers.cs | 33 +++
Assets/Scripts/NullCheckers.cs.meta | 3 +
Assets/Scripts/WindowBase.cs | 11 +
Assets/Scripts/WindowBase.cs.meta | 11 +
Assets/Scripts/WindowSpawner.cs | 52 ++++
Assets/Scripts/WindowSpawner.cs.meta | 11 +
17 files changed, 441 insertions(+), 9 deletions(-)
create mode 100644 .idea/.idea.Inter-Face-Off/.idea/.gitignore
create mode 100644 .idea/.idea.Inter-Face-Off/.idea/encodings.xml
create mode 100644 .idea/.idea.Inter-Face-Off/.idea/indexLayout.xml
create mode 100644 .idea/.idea.Inter-Face-Off/.idea/vcs.xml
create mode 100644 Assets/Scripts.meta
create mode 100644 Assets/Scripts/BasicWindow.cs
create mode 100644 Assets/Scripts/BasicWindow.cs.meta
create mode 100644 Assets/Scripts/Extensions.meta
create mode 100644 Assets/Scripts/Extensions/ListExtensions.cs
create mode 100644 Assets/Scripts/Extensions/ListExtensions.cs.meta
create mode 100644 Assets/Scripts/NullCheckers.cs
create mode 100644 Assets/Scripts/NullCheckers.cs.meta
create mode 100644 Assets/Scripts/WindowBase.cs
create mode 100644 Assets/Scripts/WindowBase.cs.meta
create mode 100644 Assets/Scripts/WindowSpawner.cs
create mode 100644 Assets/Scripts/WindowSpawner.cs.meta
diff --git a/.idea/.idea.Inter-Face-Off/.idea/.gitignore b/.idea/.idea.Inter-Face-Off/.idea/.gitignore
new file mode 100644
index 0000000..cd3d969
--- /dev/null
+++ b/.idea/.idea.Inter-Face-Off/.idea/.gitignore
@@ -0,0 +1,15 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/.idea.Inter-Face-Off.iml
+/projectSettingsUpdater.xml
+/modules.xml
+/contentModel.xml
+# Ignored default folder with query files
+/queries/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/.idea.Inter-Face-Off/.idea/encodings.xml b/.idea/.idea.Inter-Face-Off/.idea/encodings.xml
new file mode 100644
index 0000000..df87cf9
--- /dev/null
+++ b/.idea/.idea.Inter-Face-Off/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.Inter-Face-Off/.idea/indexLayout.xml b/.idea/.idea.Inter-Face-Off/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/.idea/.idea.Inter-Face-Off/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.Inter-Face-Off/.idea/vcs.xml b/.idea/.idea.Inter-Face-Off/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/.idea.Inter-Face-Off/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity
index 89d7244..3d0c0af 100644
--- a/Assets/Scenes/SampleScene.unity
+++ b/Assets/Scenes/SampleScene.unity
@@ -38,7 +38,6 @@ RenderSettings:
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
- m_IndirectSpecularColor: {r: 0.18028305, g: 0.22571313, b: 0.3069213, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
@@ -104,7 +103,7 @@ NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
- serializedVersion: 2
+ serializedVersion: 3
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
@@ -117,7 +116,7 @@ NavMeshSettings:
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
- accuratePlacement: 0
+ buildHeightMesh: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
@@ -160,13 +159,21 @@ Camera:
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
- m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
- m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
@@ -200,13 +207,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 330585543}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &330585547
MonoBehaviour:
@@ -238,9 +245,20 @@ MonoBehaviour:
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
+ m_AllowHDROutput: 1
+ m_UseScreenCoordOverride: 0
+ m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_Version: 2
+ m_TaaSettings:
+ m_Quality: 3
+ m_FrameInfluence: 0.1
+ m_JitterScale: 1
+ m_MipBias: 0
+ m_VarianceClampScale: 0.9
+ m_ContrastAdaptiveSharpening: 0
--- !u!1 &410087039
GameObject:
m_ObjectHideFlags: 0
@@ -328,13 +346,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 410087039}
+ serializedVersion: 2
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!114 &410087042
MonoBehaviour:
@@ -348,14 +366,17 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Version: 1
+ m_Version: 3
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
m_LightLayerMask: 1
+ m_RenderingLayers: 1
m_CustomShadowLayers: 0
m_ShadowLayerMask: 1
+ m_ShadowRenderingLayers: 1
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
+ m_SoftShadowQuality: 1
--- !u!1 &832575517
GameObject:
m_ObjectHideFlags: 0
@@ -397,11 +418,234 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 832575517}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
- m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1539476651
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1539476655}
+ - component: {fileID: 1539476654}
+ - component: {fileID: 1539476653}
+ - component: {fileID: 1539476652}
+ m_Layer: 5
+ m_Name: GameCanvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1539476652
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1539476651}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &1539476653
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1539476651}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 1920, y: 1080}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0.5
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+ m_PresetInfoIsWorld: 0
+--- !u!223 &1539476654
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1539476651}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_VertexColorAlwaysGammaSpace: 1
+ m_AdditionalShaderChannelsFlag: 0
+ m_UpdateRectTransformForStandalone: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!224 &1539476655
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1539476651}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!1 &1683319378
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1683319381}
+ - component: {fileID: 1683319380}
+ - component: {fileID: 1683319379}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1683319379
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683319378}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_HorizontalAxis: Horizontal
+ m_VerticalAxis: Vertical
+ m_SubmitButton: Submit
+ m_CancelButton: Cancel
+ m_InputActionsPerSecond: 10
+ m_RepeatDelay: 0.5
+ m_ForceModuleActive: 0
+--- !u!114 &1683319380
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683319378}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &1683319381
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1683319378}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2038986851
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2038986853}
+ - component: {fileID: 2038986852}
+ m_Layer: 0
+ m_Name: Spawner
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &2038986852
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2038986851}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 83fa400829eb6494796e00cfbb1c5d71, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!4 &2038986853
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2038986851}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 330585546}
+ - {fileID: 410087041}
+ - {fileID: 832575519}
+ - {fileID: 1539476655}
+ - {fileID: 1683319381}
+ - {fileID: 2038986853}
diff --git a/Assets/Scripts.meta b/Assets/Scripts.meta
new file mode 100644
index 0000000..9f3ee38
--- /dev/null
+++ b/Assets/Scripts.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6364d0560189fac4299f772a04c17198
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/BasicWindow.cs b/Assets/Scripts/BasicWindow.cs
new file mode 100644
index 0000000..14ce40d
--- /dev/null
+++ b/Assets/Scripts/BasicWindow.cs
@@ -0,0 +1,7 @@
+namespace InterfaceOff
+{
+ public class BasicWindow : WindowBase
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/BasicWindow.cs.meta b/Assets/Scripts/BasicWindow.cs.meta
new file mode 100644
index 0000000..47afebf
--- /dev/null
+++ b/Assets/Scripts/BasicWindow.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: eac7797c414842e59b3acc1c0d6a542d
+timeCreated: 1768298931
\ No newline at end of file
diff --git a/Assets/Scripts/Extensions.meta b/Assets/Scripts/Extensions.meta
new file mode 100644
index 0000000..2403b04
--- /dev/null
+++ b/Assets/Scripts/Extensions.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 90a599d4c2654a3793b34809ea82ead1
+timeCreated: 1768299034
\ No newline at end of file
diff --git a/Assets/Scripts/Extensions/ListExtensions.cs b/Assets/Scripts/Extensions/ListExtensions.cs
new file mode 100644
index 0000000..d0329a2
--- /dev/null
+++ b/Assets/Scripts/Extensions/ListExtensions.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+
+public static class ListExtensions
+{
+ public static T GetRandom(this List list)
+ {
+ int index = UnityEngine.Random.Range(0, list.Count);
+ return list[index];
+ }
+}
diff --git a/Assets/Scripts/Extensions/ListExtensions.cs.meta b/Assets/Scripts/Extensions/ListExtensions.cs.meta
new file mode 100644
index 0000000..26cbba9
--- /dev/null
+++ b/Assets/Scripts/Extensions/ListExtensions.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: cf13893a58ea446491ffdf8b92ddd426
+timeCreated: 1768299042
\ No newline at end of file
diff --git a/Assets/Scripts/NullCheckers.cs b/Assets/Scripts/NullCheckers.cs
new file mode 100644
index 0000000..ae04289
--- /dev/null
+++ b/Assets/Scripts/NullCheckers.cs
@@ -0,0 +1,33 @@
+using System.Runtime.CompilerServices;
+using JetBrains.Annotations;
+using Unity.VisualScripting;
+
+namespace InterfaceOff
+{
+ public class DebugUtils
+ {
+ [MethodImpl(MethodImplOptions.AggressiveInlining), AssertionMethod, ContractAnnotation("null => true")]
+ public static bool IsNull(UnityEngine.Object obj)
+ {
+ return obj.IsUnityNull();
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining), AssertionMethod, ContractAnnotation("null => true")]
+ public static bool IsNull(object obj)
+ {
+ return obj == null;
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining), AssertionMethod, ContractAnnotation("null => false")]
+ public static bool IsNotNull(UnityEngine.Object obj)
+ {
+ return !obj.IsUnityNull();
+ }
+
+ [MethodImpl(MethodImplOptions.AggressiveInlining), AssertionMethod, ContractAnnotation("null => true")]
+ public static bool IsNotNull(object obj)
+ {
+ return obj != null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/NullCheckers.cs.meta b/Assets/Scripts/NullCheckers.cs.meta
new file mode 100644
index 0000000..22805c7
--- /dev/null
+++ b/Assets/Scripts/NullCheckers.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f00bdf5606894d12a4cb4335afd5bf54
+timeCreated: 1768299617
\ No newline at end of file
diff --git a/Assets/Scripts/WindowBase.cs b/Assets/Scripts/WindowBase.cs
new file mode 100644
index 0000000..74ad819
--- /dev/null
+++ b/Assets/Scripts/WindowBase.cs
@@ -0,0 +1,11 @@
+using UnityEngine;
+
+namespace InterfaceOff
+{
+ public abstract class WindowBase : MonoBehaviour
+ {
+ public void InstantiateWindowBase()
+ {
+ }
+ }
+}
diff --git a/Assets/Scripts/WindowBase.cs.meta b/Assets/Scripts/WindowBase.cs.meta
new file mode 100644
index 0000000..cd08cb9
--- /dev/null
+++ b/Assets/Scripts/WindowBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 032b6f3e9e786884085cabb655a4ad31
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/WindowSpawner.cs b/Assets/Scripts/WindowSpawner.cs
new file mode 100644
index 0000000..ce60fdb
--- /dev/null
+++ b/Assets/Scripts/WindowSpawner.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+namespace InterfaceOff
+{
+ public class WindowSpawner : MonoBehaviour
+ {
+ private List WindowTypes { get; } = new();
+
+ [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))
+ {
+ Type type = WindowTypes.GetRandom();
+ GameObject go = new();
+ go.transform.SetParent(GameCanvas.transform);
+
+ WindowBase windowBase = go.AddComponent(type) as WindowBase;
+ if (DebugUtils.IsNull(windowBase))
+ {
+ Debug.LogError("How did this happen");
+ return;
+ }
+
+ windowBase.InstantiateWindowBase();
+ }
+ }
+ }
+}
diff --git a/Assets/Scripts/WindowSpawner.cs.meta b/Assets/Scripts/WindowSpawner.cs.meta
new file mode 100644
index 0000000..8a293a1
--- /dev/null
+++ b/Assets/Scripts/WindowSpawner.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 83fa400829eb6494796e00cfbb1c5d71
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: