#Polymorphism drama

1 messages · Page 1 of 1 (latest)

cobalt crag
#
public interface HlslTranslatable
    {
        string CSharpName { get; }
        string HlslName { get; }
    }

    public interface HlslDependency : HlslTranslatable
    {
        string FilePath { get; }
    }

    public abstract class IPragma : HlslDependency
    {
        public abstract List<HlslDependency> Dependencies { get; }
        public abstract string CSharpName { get; }
        public abstract string HlslName { get; }
        public abstract string FilePath { get; }

        public string IncludeDirectives
        {
            get
            {
                StringBuilder ss = new StringBuilder();
                foreach (var pragmator in Dependencies)
                {
                    ss.Append($"#include \"{pragmator.FilePath}\"\n");
                }
                return ss.ToString();
            }
        }

        public string Pragma => $"#ifndef {pragma}\n#define {pragma}";
        private string pragma => $"{HlslName}_AUTOGENERATED_HLSL";
    }
    

#
public class HlslBaseType: HlslTranslatable
    {
        public static List<HlslBaseType> TypesPool = new List<HlslBaseType>();

        public HlslBaseType(System.Type type, string hlslName = null)
        {
            MyType = type;
            CSharpName = type.Name;
            if (hlslName != null)
            {
                HlslName = hlslName;
            }else
            {
                HlslName = type.Name;
            }
        }
        public static void CreateType(Type type)
        {
            TypesPool.Add(new 
#
HlslBaseType(type));
        }

        public static HlslBaseType TryGet(Type type)
        {
            HlslBaseType instance = TypesPool.FirstOrDefault(x => x.MyType == type);
            return instance;
        }

        public Type MyType { get; }
        public string HlslName { get; }
        public string CSharpName { get; }



    }
    public class HlslLinkedType : IPragma
    {
        public static List<HlslLinkedType> TypesPool = new List<HlslLinkedType>();
        public HlslLinkedType(Type type)
        {
            MyType = type;
            CSharpName = type.Name;
            HlslName = type.Name;
            Dependencies = new List<HlslDependency>();
        }