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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Сущности:
1. Персонаж. Каждый имеет уникальные, динамические характеристики, которые могут зависеть от разных факторов.
2. Действующий эффект. Имеет оставшееся время.
3. Данные эффекта. Статические, все возможные эффекты заданы заранее и не меняются.
4. Список действующих эффектов.

Код:
// Персонаж
class Character {
    var agility:Number;
    var strength:Number;
    var effects:EffectList;
    var needUpdateStats:Boolean;
}

// Действующий эффект
class Effect {
    var id:Uint;
    var remaining:Number;
}

// Данные эффекта
class EffectData {
    var id:Uint;
    var name:String;
    var bonusAgility:Number;
    var bonusStrength:Number;
}

// Список действующих эффектов
class EffectList {
    // Просто список с Effect, диспетчерезирующий события добавления/удаления.
}
Lazy update:
Персонаж подписан на свой список эффектов, при изменений в нём устанавливает флаг needUpdateStats в true. Когда необходимо получить актуальные значения параметров персонажа, например, через геттер, проверяется этот флаг и в случае true - выполняется перерасчёт. (lazy update)

Это примерный рецепт. Конкретная реализация зависит от проекта, сущностей, связей и т.д.
__________________
Дети не должны знать о своих родителях