diff --git a/OmegaLeo.HelperLib/Models/InstancedObject.cs b/OmegaLeo.HelperLib/Models/InstancedObject.cs new file mode 100644 index 0000000..1c156e2 --- /dev/null +++ b/OmegaLeo.HelperLib/Models/InstancedObject.cs @@ -0,0 +1,31 @@ +using System; + +namespace GameDevLibrary.Models +{ + public abstract class InstancedObject where T : class + { + public static T Instance { get; private set; } + + protected InstancedObject() + { + if (Instance != null) + { + throw new InvalidOperationException($"An instance of {typeof(T).Name} already exists."); + } + + Instance = this as T; + if (Instance == null) + { + throw new InvalidOperationException($"Failed to cast {GetType().Name} to {typeof(T).Name}."); + } + } + + ~InstancedObject() + { + if (Instance == this) + { + Instance = null; + } + } + } +} \ No newline at end of file