Народ такой ворос, есть два вида врагов - один босс,

другой обычный юнит. Ранее я правшивал тут как грамотно реализовать архитектуру без копипаста и мне посоветовали сделать асбтрактный класс с методами которые наследуют босс и обычный юнит, и внутри них уже реализовывать логику выполнения каждого метода из абстраткного класса. Так мы врпинципе получили тоже самое, как если бы мы скопипатили один метод из скрипта на обьекте босса в скрипт на обьекте обычного юнита. т.е. фактически ничего не изменилось кроме реализации абстрактного класса и наследования. Затем мне посоветовали сделать интерфейсы, но поскольку интерфейсы как и абстрактные классы не позволяют указывать в них логику выполнения методов, то фактически получилось тоже что и при наследовании от абстрактного класса. Так все же как мне реализовать логику поведения юнита, например стрельба. т.е. я не хочу копипастить а хочу, чтобы логика выполнения стрельбы а именно : получение трансформа плеера, взаимодействия с дочерним на враге компонентом AimConstraint (т.е. поворот туловища на плеера), спавн обьекта projectile в направлении трансформа playera и т.д. была прописана один раз в каком то классе, а дочерний класс лишь либо мог её использовать либо нет?

4 ответов

27 просмотров

Я не уверен, что будет прям лучшее решение, но я бы сделал так: - Один класс хранит данные о враге/боссе и методы, другой контролирует их вызов - Имеется абстрактный класс Enemy, имеющий общие для всех типов врагов поля и методы - Классы Mob и Boss наследуются от класса Enemy и дают свою реализацию методов и отдельные поля - Классы MobController и BossController вызывают методы из соответствующих классов для врага и босса. Некоторые могут и не вызываться вовсе при желании. Но надо отметить, что информация о самих мобах и боссах не очень полная. Я лишь дал в общих очертаниях то, как я вижу эту систему.

если хочешь проще и примитивнее (а не как я искать по 10 вариантов решения проблемы и потом днями голову ломать), сделай просто класс типа BotLogic (без наследия) туда засунь логику / код который повторяется. Потом как раньше создай обычного моба и внутри него инициализируй класс BotLogic с передачей в конструкторе ссылок, и дёргай функции как хочешь, так же у босса. То есть разница в том что весь повторный код у тебя будет в одном классе BotLogic, но дёргать будешь у каждого по разному

абстрактный класс позволяет сделать не только abstract, но и обычный метод (с реализацией), который будет доступен наследникам

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта