template UEObjectCreateMenuItem()
enum UEObjectCreateMenuItem =
q{
static if(!is(typeof(this) == UEComponent) && is(typeof(this) : UEComponent))
{
version(UEIncludeEditor)import unecht.core.components.editor.menus;
version(UEIncludeEditor)import unecht.meta.uda;
version(UEIncludeEditor)override void getMenuItems(ref EditorMenuItem[] items)
{
super.getMenuItems(items);
alias T = typeof(this);
foreach(m; __traits(derivedMembers, T))
{
static if(__traits(isStaticFunction, __traits(getMember, T, m)))
{
static if(hasUDA!(__traits(getMember, T, m), MenuItem))
{
alias MemberType = typeof(&__traits(getMember, T, m));
static if(is(MemberType : MenuItemFunc))
{
alias uda = getUDA!(__traits(getMember, T, m), MenuItem);
items ~= EditorMenuItem(uda.name, &__traits(getMember, T, m), uda.validate);
}
else
{
static assert(false, format("%s.%s is annotated as MenuItem but has type: '%s' expected '%s'",
T.stringof,m,MemberType.stringof,MenuItemFunc.stringof));
}
}
}
}
}
}
};