using System; using System.Collections.Generic; using UnityEngine; namespace Popcron { public abstract class Drawer { private static Dictionary typeToDrawer = null; public abstract int Draw(ref Vector3[] buffer, params object[] args); public Drawer() { } public static Drawer Get() where T : class { //find all drawers if (typeToDrawer == null) { typeToDrawer = new Dictionary { //add defaults { typeof(CubeDrawer), new CubeDrawer() }, { typeof(LineDrawer), new LineDrawer() }, { typeof(PolygonDrawer), new PolygonDrawer() }, { typeof(SquareDrawer), new SquareDrawer() }, { typeof(FrustumDrawer), new FrustumDrawer() } }; } return typeToDrawer.TryGetValue(typeof(T), out var drawer) ? drawer : null; } } }