// Menu.cs : -FirstPass public abstract class Menu : MonoBehaviour where T:class, Menu.Item { // contents public interface Item { // contents } } // RoundMenu.cs : -FirstPass public abstract class RoundMenu : Menu { // contents public abstract class Button: DragButton, RoundMenu.Item { // contents } } // UnitMenu.cs : -FirstPass public interface UnitMenu where T: class, Menu.Item { // contents } // TargetedActionButton.cs : Second pass public abstract class TargetedActionButton : RoundMenu.Button { // contents } // FloatingMenu.cs : Second pass public abstract class FloatingMenu : RoundMenu { // contents } // FloatingUnitMenu.cs : Second pass public class FloatingUnitMenu : FloatingMenu, UnitMenu { // redacted several methods and properties for brevity new public class Button : TargetedActionButton, Menu.Item, UnitGroup.UnitButton { // redacted for brevity } }