// Menu.cs : -FirstPass
public abstract class Menu<T> : MonoBehaviour where T:class, Menu<T>.Item {
// contents
public interface Item {
// contents
}
}
// RoundMenu.cs : -FirstPass
public abstract class RoundMenu : Menu<RoundMenu.Button> {
// contents
public abstract class Button: DragButton, RoundMenu.Item {
// contents
}
}
// UnitMenu.cs : -FirstPass
public interface UnitMenu<out T> where T: class, Menu<T>.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<FloatingUnitMenu.Button> {
// redacted several methods and properties for brevity
new public class Button : TargetedActionButton, Menu<FloatingUnitMenu.Button>.Item, UnitGroup.UnitButton {
// redacted for brevity
}
}
Comments