У тебя уже 4 абстрактных класса. Добавляешь еще одну градацию (Атакующее, неатакующее, сериализуемое, несериализуемое) и увеличиваешь кол-во комбинаций в несколько раз
Ты только что сделал то, что я тут тебе описываю - перешел с наследования на делегирование - , но сделал половинчато. Делегируй и движение. И вообще вынеси тип движения в интерфейс. Чтобы было ISwimming, IWalking, IAtacking
В том то и дело, что это всё еще ООП. Не одним наследованием ООП писано. Вообще наследование самый негибкий инструмент ООП, открой список известных паттернов проектирования - 99% будут без наследования
И вообще, структуры от классов отличаются только названием. Вызывать методы одних структур из методов других структур? Можно. Пихать одну структуру в другую? Можно. Определить интерфейс трейт и работать с массивом разных структур через их трейт? Можно.