Appleman
11.04.2018, 11:33
Друзья!
Судя по соотношению просмотров и ответов на мой предыдущий (http://www.flasher.ru/forum/showpost.php?p=1204859&postcount=1) вопрос, делаю вывод о качестве его формулировки :). Попробую ещё раз: компактно и с примерами.
Итак, у меня выполнено действие, вот сигнатура его контруктора:
public function ActionEntity(data: ADEntity, attacker: Character, defender: Character)
Выбранное пользователем действие обрабатывается Моделью по паттерну Стратегия. В нём рассчитаны и доступны результирующие: ID свойства основного эффекта и его размер. Они действуют для того, кто защищался (т.е. имел статус IDs.CH_ACTION_STATUS_DEFENDER). По завершении действия, Модель запускает приватный метод finalazeAction:
private function finalizeAction() : void // Финализирует основное действие
{
var propUpdatesArray: Array = new Array[]; // Массив изменяемых свойств персонажа
for (var i: uint = 0; i <= _foregroundCharacters.length - 1; i++)
{
var ch: Character = _foregroundCharacters[i];
trace("\nПодводим итоги для " + ch.characterID);
if (ch.actionStatus == IDs.CH_ACTION_STATUS_DEFENDER)
{
propUpdatesArray.push(new CharacterPropUpdate(_currentAction.actionData.primaryEffectProp, _currentAction.primaryEffectValue)); // Например, пара: IDs.PROP_HEALTH, -25
// Тут может быть несколько эффектов
}
}
Последнее, что остаётся сделать, это отправить массив с инструкциями по обновлению значений свойств куда-то, где они будут применены. Вопрос в том, что я никак не могу определиться, куда именно. Есть вариант записать прямо там:
ch.updateProps(propUpdatesArray);
и написать метод внутри класса Character, разместив там всю дополнительную логику (т.к. изменения свойств может подчиняться какой-то ещё дополнительной логике, в т.ч. контекстно-зависимой).
Либо в классе Модели создать новый метод (пишу прямо тут примерно):
private function updateCharacterProps(ch: Character, propUpdatesArray: Array) : void
{
var instruction: CharacterPropUpdate;
var propID: String;
var currentValue: Number;
var newValue: Number;
for (var i: uint = 0; i <= propUpdatesArray.length - 1; i++)
{
instruction = propUpdatesArray[i];
propID = instruction.propID;
newValue = instruction.value;
currentValue = ch[propID];
// Тут какая-то дополнительная логика, общая для всех изменяемых свойств
ch[propID] += newValue;
}
Надеюсь, так понятнее, что я хочу спросить. Буду признателен за комментарии.
Судя по соотношению просмотров и ответов на мой предыдущий (http://www.flasher.ru/forum/showpost.php?p=1204859&postcount=1) вопрос, делаю вывод о качестве его формулировки :). Попробую ещё раз: компактно и с примерами.
Итак, у меня выполнено действие, вот сигнатура его контруктора:
public function ActionEntity(data: ADEntity, attacker: Character, defender: Character)
Выбранное пользователем действие обрабатывается Моделью по паттерну Стратегия. В нём рассчитаны и доступны результирующие: ID свойства основного эффекта и его размер. Они действуют для того, кто защищался (т.е. имел статус IDs.CH_ACTION_STATUS_DEFENDER). По завершении действия, Модель запускает приватный метод finalazeAction:
private function finalizeAction() : void // Финализирует основное действие
{
var propUpdatesArray: Array = new Array[]; // Массив изменяемых свойств персонажа
for (var i: uint = 0; i <= _foregroundCharacters.length - 1; i++)
{
var ch: Character = _foregroundCharacters[i];
trace("\nПодводим итоги для " + ch.characterID);
if (ch.actionStatus == IDs.CH_ACTION_STATUS_DEFENDER)
{
propUpdatesArray.push(new CharacterPropUpdate(_currentAction.actionData.primaryEffectProp, _currentAction.primaryEffectValue)); // Например, пара: IDs.PROP_HEALTH, -25
// Тут может быть несколько эффектов
}
}
Последнее, что остаётся сделать, это отправить массив с инструкциями по обновлению значений свойств куда-то, где они будут применены. Вопрос в том, что я никак не могу определиться, куда именно. Есть вариант записать прямо там:
ch.updateProps(propUpdatesArray);
и написать метод внутри класса Character, разместив там всю дополнительную логику (т.к. изменения свойств может подчиняться какой-то ещё дополнительной логике, в т.ч. контекстно-зависимой).
Либо в классе Модели создать новый метод (пишу прямо тут примерно):
private function updateCharacterProps(ch: Character, propUpdatesArray: Array) : void
{
var instruction: CharacterPropUpdate;
var propID: String;
var currentValue: Number;
var newValue: Number;
for (var i: uint = 0; i <= propUpdatesArray.length - 1; i++)
{
instruction = propUpdatesArray[i];
propID = instruction.propID;
newValue = instruction.value;
currentValue = ch[propID];
// Тут какая-то дополнительная логика, общая для всех изменяемых свойств
ch[propID] += newValue;
}
Надеюсь, так понятнее, что я хочу спросить. Буду признателен за комментарии.