Показать сообщение отдельно
Старый 19.07.2018, 01:14
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 16  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Послушайте, други,печальную и поучительную историю об импульсивном программировании. Я наконец добрался до Entity-Component-System, пяток статей прочитал (RedHead90, спасибо за наводку), и так меня этот подход вставил, ну просто не по-детски! По крутизне почти MVC, имхо. И загорелся я если не целиком под него переписать, то хотя бы свою частную проблему с раздутым классом персонажа решить. И рефакторил я хрен знает сколько часов на кураже. Выделил отдельные компоненты, схожие по области и логике, кое-где от них ещё унаследовался для реализации специфики, задвинул в них методы обработки данных. На первый взгляд получилось шикарно. Вполне компактный класс Character, к которому подключаются блоки Personality, Parameters, Skills, Statuses и т.п. И все они ни хрена не инкапсулированы. Надо кому со стороны, например, условие проверить - не вопрос! Обращаемся: character.personality[PropID] и вперёд с песней!

Но вот один момент я, блин, не учёл. А он по ходу самый важный. Почему-то мне было невдомёк, что в "чистом" виде все свойства, забитые в Personality и Sexuality, никому не нужны. Причём совсем. Получая, например, значение интеллекта, нужно ещё посмотреть, не надет ли шутовской колпак (WearManager), и не контужен ли наш герой (StatusManager). Короче, тянуть что-то в обход самого "узлового" Character ни фига не получается. А если через него, то теперь у нас не "одно окно" в форме character[PropID], а ещё бухгалтерия с определением, к какому компоненту обращаться.

В общем, сижу-горюю. И обратно к бардаку откатывать неохота, и как это хозяйство без крови организовать не придумывается.
__________________
Не сломано - не чини!